1.从磁盘上读取一个文本文件(如某个java源代码),分别统计出文件中英文字母、空格、数字字符的个数。(注意文本文件中的数字指的是数字字符!!!)
代码:
import java.io.*;
public class CountCharacter {
public static void main(String[] args){
FileInputStream fis = null;
try {
fis = new FileInputStream("test.txt");
} catch (FileNotFoundException e) {
e.printStackTrace();
}
Reader reader = new InputStreamReader(fis);
countCharacter(reader);
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void countCharacter(Reader reader){
char[] chars = new char[1024];
int len;
int countLetter = 0,countSpace = 0,countNumber = 0;
try{
while((len = reader.read(chars)) != -1){
for (int i = 0;i < len; i++){
if(chars[i] == ' '){
countSpace++;
}else if (chars[i] >= '0' && chars[i] <= '9'){
countNumber++;
}else if (chars[i] >= 'A' && chars[i] <= 'Z'){
countLetter++;
}else if (chars[i] >= 'a' && chars[i] <= 'z'){
countLetter++;
}else {
}
}
}
} catch (IOException e){
e.printStackTrace();
}
System.out.println("中英文字母、空格、数字字符的个数分别是:"
+ countLetter + "," + countSpace + "," + countNumber);
}
}
运行结果:
2.在一个磁盘的文件里保存26个英文小写字母(乱序),将他们读入内存中,进行排序,把排好顺序的数再重新追加写到磁盘的该文件中。
代码:
import java.io.*;
public class LetterSort {
public static void main(String[] args) throws IOException {
FileInputStream fis = new FileInputStream("alphabet.txt");
Reader reader = new InputStreamReader(fis);
FileOutputStream fos = new FileOutputStream("alphabet.txt",true);
Writer writer = new OutputStreamWriter(fos);
char[] chars = new char[1024];
int len;
while((len = reader.read(chars)) != -1){
bubbleSort(chars,len);
writer.write("\n");
writer.write(chars,0 , len);
}
reader.close();
writer.close();
}
public static void bubbleSort(char arr[],int len) {
for (int i = 0; i < len - 1; i++) {
for (int j = 0; j < len - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
char temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
}
运行结果:
3.复制目录,要求:
a. 复制目录及其所有子目录,保证在复制的目标目录中,目录结构和原目录相同
b. 同时,对于原目录及其子目录,只将原目录中的指定类型的.java文件,
复制到目标目录中,对应的相同目录中。
代码:
import java.io.*;
public class CopyJavaFIle {
public static void main(String[] args) throws IOException {
File origin = new File("D:\\dir");//原来目录
File target = new File("D:\\dir2");//目标目录
copyFile(origin, target);//复制文件
}
//复制文件(目录,java文件)
public static void copyFile(File origin, File target) throws IOException {
File[] files = origin.listFiles();//获取目录下的文件或者目录
for(int i = 0;i < files.length;i++){
if(files[i].isDirectory()){//如果是目录
//创建目标目录下的目录
String dirName = target.toString() + "\\" + files[i].getName();//目标目录路径名
File dir = new File(dirName);//创建对象
dir.mkdir();//创建目录
copyFile(files[i], dir);
}
else{//如果是文件
if(files[i].toString().endsWith(".java")){
String fileName = target.toString() + "\\" + files[i].getName();//是java文件,得到指定目录下的路径名
File copy = new File(fileName);//创建File对象
copyJava(files[i],copy);
}
}
}
}
//复制java文件
public static void copyJava(File origin, File target) throws IOException {
InputStream in = new FileInputStream(origin);//读取原来文件的流对象
OutputStream out = new FileOutputStream(target);//要写入文件的流对象
byte[] byteBuffer = new byte[1024];
int len;
//从原文件中读取数据
while ((len = in.read(byteBuffer)) != -1) {
// 将读取入到byteBuffer中的数据,一次写入到目标文件中
out.write(byteBuffer,0, len);
}
in.close();
out.close();
}
}
运行结果:
#个人学习记录,如发现有错误之处,欢迎与我交流