Java IO 之 BufferedReader BufferedWriter 通过缓冲区实现字符文本文件的复制

时间:2022-03-28 16:44:02

通过读文件和写文件都使用缓存 BufferedReader 和 BufferedWriter ,使得读写的效率都得到了提高。
以下是简单使用这2个缓冲类来实现复制一个文件的过程。
和使用FileReader和FileWriter是一样样的。只是原来我们自己要写个字符数组来实现缓冲的目的,现在可以直接使用jdk给的缓冲来实现复制文件的效率提升。

package com.lxk.FileTest;

import java.io.*;

/**
* 通过缓冲区复制一个文件
*/
class CopyTextByBuf {
public static void main(String[] args) {
//读文件流的缓存
BufferedReader bufr = null;
//写文件流的缓存
BufferedWriter bufw = null;

try {
bufr = new BufferedReader(new FileReader("D:/BufferedWriterDemo.java"));
bufw = new BufferedWriter(new FileWriter("E:/BufferedWriterDemo.txt"));

String line;//读缓存和写缓存之间交流的桥梁
while ((line = bufr.readLine()) != null) {
bufw.write(line);
bufw.newLine();//写文件时,添加换行符。为什么呢?看下面解释。
bufw.flush();
}
} catch (IOException e) {
throw new RuntimeException("读写失败");
} finally {
try {
if (bufr != null)
bufr.close();
} catch (IOException e) {
System.out.println(e.getMessage());
}
try {
if (bufw != null)
bufw.close();
} catch (IOException e) {
System.out.println(e.getMessage());
}
}
}
}

BufferedReader.readLine()方法注意:

功能:
读取一个文本行。通过下列字符之一即可认为某行已终止:换行 ('\n')、回车 ('\r') 或回车后直接跟着换行。
返回:
包含该行内容的字符串,不包含任何行终止符(即"\r"、"\n"、"\r\n"),如果已到达流末尾,则返回 null
每次读取都是返回这次读取到的一行文本的字符串,读,是一个字符一个字符的读,然后当读到"\r"或者"\n"或者"\r\n"这一行的读取就结束了。把前面的n个字符合并成一个String返回,而且这个"\r"或者"\n"或者"\r\n"是不会在返回的字符串当中。所以,你再把读入的字符流写出去的话,就缺少了换行符。所以,得添加个换行符。