FileReader、FileWrite
FileReader、FlieWriter用法与FileInputStream、FileOutputStream用法基本一致,区别时前者为字符IO流、后者为字节IO流
创建缓冲区复制文件
除了“读一个字符,写一个字符”的方法复制文件外,我们还可以利用缓冲区复制文件,创建一个数组暂时保存读入字符,然后将数组内容写入文件,这样复制文件效率更高!
实例
import java.io.*;
public class Test02 {
public static void main(String[] args) throws IOException {
File file1 = new File("D:\\test\\a\\test01.txt"); //确定读目标
File file2 = new File("D:\\test\\a\\test02.txt"); //确定写目标
FileReader fileReader = new FileReader(file1); //建立 文件———》程序 IO流
FileWriter fileWriter = new FileWriter(file2); ///建立 程序--》文件 IO流
char[] ch = new char[4]; //创建一个字符数组作为缓冲区
int len = fileReader.read(ch); //读数组
while (len!=-1){
fileWriter.write(ch); //数组内容全部写入
len = fileReader.read(ch); //下一次读取数组
}
fileWriter.close(); //关闭IO流
fileReader.close();
}
}
结果
可以看到结果并不是我们所预期的
原因是
所以上一次未被覆盖的“1”也写入了文件,所以结果为“你好,123!1”
修改后代码
import java.io.*;
public class Test02 {
public static void main(String[] args) throws IOException {
File file1 = new File("D:\\test\\a\\test01.txt"); //确定读目标
File file2 = new File("D:\\test\\a\\test02.txt"); //确定写目标
FileReader fileReader = new FileReader(file1); //建立 文件———》程序 IO流
FileWriter fileWriter = new FileWriter(file2); ///建立 程序--》文件 IO流
char[] ch = new char[4]; //创建一个字符数组作为缓冲区
int len = fileReader.read(ch); //读数组
while (len!=-1){ //数组内容写入
fileWriter.write(ch,0,len); //[0,len)
len = fileReader.read(ch); //下一次读取数组
}
fileWriter.close(); //关闭IO流
fileReader.close();
}
}
结果为