JAVA:io字符流FileReader和FileWriter基础
因为字节流和字符流有很多重复的地方,所以这回干脆直接把字符流的输入和输出直接一起说了。字符流的核心优点是以字符为基本操作单位,能自动处理不同编码的字符转换,避免直接操作字节可能导致的乱码问题。
字符流内置编码和解码机制,可直接处理 Unicode、UTF-8、GBK 等多种字符编码,无需手动处理字节与字符的映射关系。
一、FileReader
还是先从创建FileReader对象开始,注意提前将文件的编码格式和编译器的编码格式统一。是UTF-8两个就都得是UTF-8,是GBK两个就都得是GBK。(在d盘中创建一个名为Test98.txt的文件,提前在文件中写好内容,我写的内容是“字符型Reader”):
String FilePath = "d:\\Test98.txt";
FileReader fileReader = new FileReader(FilePath);
1.输入单个字符:
int c = 0;
while((c=fileReader.read())!=-1) {System.out.print((char)c);
}
创建一个int类型的c来接收read()的返回值,循环输出c并转为char类型。
2.输入char类型字符串当中:
char[] c = new char[4];
int readLen = 0;
while((readLen = fileReader.read())!=-1) {System.out.println(new String(c,0,readLen));
}
创建一个char类型数组c来接受文件中的字符,readLen来接收返回的读取长度。可以用String提供的构造方法先后传入数组,初始索引和偏移量来打印,或者用其他方法来输出。
最后不要忘了fileReader.close();来关闭流,释放资源。
二、FileWriter
创建一个FileWriter类对象,如果没有创建输出文件,系统会自动创建。需要注意的是在FileWriter的构造方法中还需要填入一个boolean类型的变量,这个地方决定输出方式为覆盖还是追加,true为追加,false为覆盖且默认为覆盖。
//创建FileWriter对象
String FilePath = "d:\\Test98.txt";
FileWriter fileWriter = new FileWriter(FilePath);
1.输出一个字符:
char ch = '爽';
fileWriter.write(ch);
这里write方法需要传入的是int类型的参数,传入char类型字符会自动进行类型转换。
2.传入char类型数组:
在write传入char类型数组的方法中有两种重载,一种是直接传入数组,另一种在传入数组后还需传入初始索引和偏移量。推荐使用第二种方法,可以在拷贝文件时精确传输内容。
char[] charArray = {'我','爱','你'};
fileWriter.write(charArray,0,charArray.length);
3.传入String类型字符串:
传入String类型数组的方法中同样有两种重载...
String str = "中国China";
fileWriter.write(str,0,str.length());
4.注意!!!
在输出时一定要记得最后使用flush()方法刷新或close()方法关闭流,否则内容不会输出进文件的。