要求:将C:\\Demo\\demo.txt文件复制到D:\\Java路径下。
字符流实现文件复制相对来讲比较麻烦,并且效率较差。
如果使用缓冲区方法就可以提高效率。
这是因为:缓冲区方法可以一次读取一整行的源文件数据,并将读取到的数据存在内存,然后在写入的时候直接从内存取得数据写入目的地,这就大大提高了存取的效率。
下面讨论缓冲区方法实现文件的复制:
基本思路:
1,使用字符流FileReader类对象读取源文件数据;
2,初始化一个读数据缓冲区,并关联读字符流对象;
3,初始化写字符流对象,用于将数据写入写数据缓冲区;
4,初始化一个写数据缓冲区,并关联写字符流对象;
5,将读数据缓冲区的字符数据写入写数据缓冲区中,再通过写数据缓冲区对象的write()方法将数据写入目的地。
实现过程:
//初始化流对象并关联缓冲区
FileReader fr = new FileReader("C:\\src\\test.txt");
BufferedReader br = new BufferedReader(fr);
FileWriter fw = new FileWriter("C:\\dest\\copy_test.txt");
BufferedWriter bw = new BufferedWriter(fw);
int ch = 0;
//判断缓冲区数据是否结束
while((ch = br.read()) != -1)
{
bw.write(ch);
}
bw.close();
br.close();
也可以使用以下方法进行读取/写入:
String line = null;
while((line = br.readLine()) != null)
{
bw.write(line);
}
但是此时发现,源文件中的换行在目标文件中消失了。
这是因为缓冲区read()方法在读取硬盘数据时,当遇到换行符时跳过该类符号读取。
所以从缓冲区读取数据并写入时并没有换行符号,因此复制的字符写入到目的地时显示无换行。
修改办法:在缓冲区写入数据时,调用newLine()方法实现换行,并刷新缓冲区。
bw.write(line);
bw.newLine();
bw.flush(); //使用缓冲区时一定要记得刷新缓冲区。
文件复制完成。