例如FileReader和FileWriter在读取的时候是读一次或者写一次就请求磁盘,这样使用的时间非常的长,效率比较低,因此引入BufferedReader和BufferedWriter作为读取和写入的缓存区.
1、BufferedReader一次读取8K的字符流到内存中,当程序读取字符时会先到BufferedReader中读取,若没有的话BufferedReader再从磁盘中读取,一次又是8k
2、BufferedWriter作为写入缓存区,要写入文件的字符流写入BufferedWriter(内存中),当刷新或关闭BufferedWriter时,才写入磁盘,减少磁盘的写入次数,提高效率
此二者使用时,首先要有流对象,一下代码举例:
import java.io.*; class Test { public static void main(String[] args) { try { copy("c:\log.txt", "d:\testlog.txt"); } catch(IOException e) { e.printStackTrace(); System.out.println("IO异常"); } } public static void copy(String sourcePath, String destPath)throws IOException { //创建读取和写入缓冲区 BufferedReader bufferedReader = new BufferedReader(new FileReader(sourcePath)); BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(destPath, true)); //用以存放bufferedReader读取出来的一行 String readerCache = null; //当BufferedReader读取一行时是以换行符为判断,但不会读取换行符 while((readerCache = bufferedReader.readLine()) != null) { bufferedWriter.write(readerCache); bufferedWriter.newLine(); //写入一个换行符 bufferedWriter.flush(); //刷新写入文件 } //当缓冲区关闭的时候流资源随之关闭
//注意在关闭资源的时候要注意判断,若没有创建成功,本来就是null,关闭的时候会发生异常,增强代码的健壮性
if(bufferedReader != null) bufferedReader.close();
if(bufferedWriter != null) bufferedWriter.close(); } }