FileReader/FileWriter
直接操作文件,但文本文件无法处理编码格式,需要回归到InputStreamReader/OutputStreamWriter方法
此时项目默认编码是gbk的
而此时要复制的文件的编码是Utf-8的。
我们有两种方式,一种是项目也是Utf8的
一种是,我们改成可以设置字符集的InputStreamReader和OutputStreamReader
写true的话就是在文件中追加内容
FileReader/FileWriter不能设置编码格式,使用的是项目本身的编码。
InputStreamReader/OutputStreamWriter构造方法需要 InputStream/OutputStream 的对象 , 可以设置编码。FileRead/Writer 构造方法直接是是 File 的对象 ,这样代码量相对较少,但创建时不可以设置编码,需要额外注意
文件读写流
Read/Write 的两个实现类Inpu/OutputStreamRead/Write , FileRead/Writer ,前者构造方法需要 Inpu/OutputStream 的对象,创建时可以更改编码方式,后者 构造方法是 File 的对象 ,相对简单一点,但创建时不可以更改编码方式,在调用时注意编码方式
FIleReader,不能添加编码,所以要用InputStreamReader,
FileWriter 可以选择是否追加,而不是直接清除文本
FileReader/FileWriter 文件读写流。
声明方式:FileReader fl=new FileReader(File);
FileWriter fw=new FileWriter(File,[true/false]);//(true追加,false覆盖).
依旧是使用fl.read()/fw.write()方法,但文件读写流无法改变读写时的编码,容易出现乱码。
fw.flush();//进行刷新。
gbk-中文占2个字节,英文占1个字节
UTF-8中文占3个字节,英文站1个字节
UTF-16be(java是双字节编码),中文英文都占2个字节
FileReader≈FileInputStream+InputStreamReader
字符流之文件读写流FileReader/FileWriter读文本文件,继承InputStreamReader/OutputStreamWriter,在构造上更加方便
FileReader/FileWriter
字符流---FileReader、FileWriter(文件读写流)---实例
FileReader fr = new FileReader("e:\\javaio\\imooc.txt");
FileWriter fw = new FileWriter("e:\\javaio\\imooc2.txt");
//FileWriter fw = new FileWriter("e:\\javaio\\imooc2.txt",true);
char[] buffer = new char[2056];
int c ;
while((c = fr.read(buffer,0,buffer.length))!=-1){
fw.write(buffer,0,c);
fw.flush();
}
fr.close();
fw.close();
FileReader/FileWriter 跟InputStreamReader/OutputStreamWriter有点像
共同点:
都是以char为单位实现
底层都是字节单位实现
不同点:
优:比InputStreamReader/OutputStreamWriter简单一点
缺:不能指定编码格式读取
代码解析:
//批处理(单字符处理没写)
FileReader fr = new FileReader("F:\\java\\demo\\FrAndFw1.txt");
FileWriter fw = new FileWriter("F:\\java\\demo\\FrAndFw2.txt");//简便在这里,但是无法指定编码格式
char[] c1 = new char[8 * 1024];
int c;
while ((c = fr.read(c1, 0, c1.length)) != -1) {
fw.write(c1, 0, c);
fw.flush();
}
fr.close();
fw.close();
1
InputStreamReader(),
转换流