java核心技术之IO流(五)BufferedReader和BufferedWriter

最后更新于:2022-04-01 09:58:48

### 简单的说明 一般小的字符(char)文件的读取和写入数据,我们使用FileReader和FileWriter类就可以实现了,但是对于大的字符(char)文件的读取和写入数据,性能就会有很大的问题,我们一般选择BufferedReader和BufferedWriter来处理,也就是说BufferedReader和BufferedWriter主要的目的是提高字符(char)文件的内容读取和写入的性能。 ### BufferedReader和BufferedWriter ### BufferedReader类 构造方法: BufferedReader(Reader in) 创建一个有8192的字符(char)的缓存区 BufferedReader(Reader in, int size) 创建一个有size大小字符(char)的缓存区 关键方法: read() read(char[] buffer, int offset, int length) readLine()——读取一行数据 常用使用方式: ~~~ BufferedReader buf = new BufferedReader(new FileReader("file.java")); ~~~ ### BufferedWriter类 构造方法: BufferedWriter(Writer out) 创建一个有8192的字符(char)的缓存区 BufferedWriter(Writer out, int size) 创建一个有size大小字符(char)的缓存区 关键方法: write(int oneChar) write(String str, int offset, int count) write(char[] buffer, int offset, int count) newLine()——插入新的一行 flush() 主要是用来把缓存区的数据刷新到文件中去 常用使用方式: ~~~ BufferedWriter buf = new BufferedWriter(new FileWriter("file.java")); ~~~ ### 一个测试的Demo 定义三个方法: (1)testBufferedWrite方法—测试BufferedWriter BufferedWriter的使用方法: ~~~ //1.创建一个输入字符文件 //2.定义一个FileWriter //3.定义一个BufferedWriter //4.写的操作 //5.关闭对应的流 ~~~ (2)testBufferedReader方法—-向文件读内容 BufferedReader的使用方法: ~~~ //1.创建一个File文件 //2.定义一个FileReader //3.定义一个BufferedReader //4.执行读的操作 读的操作有二种方式,一各是按char来读,一种是按行来说。 一般来说按行来读是更简单,更有效的。 //5.关闭对应的流,可以只关闭最外面的流 ~~~ (3)CopyFile方法—-复制字符文件 ~~~ //1.定义输入和输出的文件 //2.分别定义FileReader,FileWriter //3.分别定义BufferedReader,BufferedWriter //4.实现复制功能 //5.关闭对应 的流,可以只关闭最外面的缓存流就可以 ~~~ ~~~ import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; public class BufferedReaderBufferedWrite { //复制字符文件 public static void CopyFile(String src,String des){ //3.分别定义BufferedReader,BufferedWriter BufferedReader br = null; BufferedWriter bw = null; try { //1.定义二个文件 File fsrc = new File(src); File fdes = new File(des); //2.分别定义FileReader,FileWriter FileReader fr = new FileReader(fsrc); FileWriter fw = new FileWriter(fdes); br = new BufferedReader(fr); bw = new BufferedWriter(fw); //4.复制操作 char[] c = new char[2]; int len; while((len = br.read(c)) != -1){ bw.write(c, 0, len); bw.flush(); } } catch (FileNotFoundException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); }finally{ //5.关闭对应 的流,可以只关闭最外面的缓存流就可以 if(bw != null){ try { bw.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if(br != null){ try { br.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } //测试BufferedReader public static void testBufferedReader(){ //3.定义一个BufferedReader BufferedReader bf = null; try { //1.定义一个文件 File f1= new File("testBufferedWrite.txt"); //2.定义一个FileReader FileReader fr = new FileReader(f1); bf = new BufferedReader(fr); //4.执行读的操作 //方式一 // char[] c = new char[2]; // int len; // while((len = bf.read(c)) != -1){ // System.out.print(c); // } //方式二 String str; while((str = bf.readLine()) != null){ System.out.print(str); System.out.println(); } } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ //5.关闭对应的流,可以只关闭最外面的流 if(bf != null){ try { bf.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } //测试BufferedWriter public static void testBufferedWrite(){ //3.定义一个BufferedWriter BufferedWriter bw = null; try { //1.定义一个文件 File f1 = new File("testBufferedWrite.txt"); //2.定义一个FileWriter FileWriter fw = new FileWriter(f1); bw = new BufferedWriter(fw); //4.写的操作 String str = "测试BufferedWriter"; bw.write(str); bw.newLine(); bw.write(str); bw.flush(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ //5.关闭对应的流 if(bw != null){ try { bw.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } } ~~~ 调用: ~~~ //BufferedWriter使用样例 BufferedReaderBufferedWrite.testBufferedWrite(); //测试BufferedReader BufferedReaderBufferedWrite.testBufferedReader(); //复制字符文件 BufferedReaderBufferedWrite.CopyFile("testBufferedWrite.txt", "testBufferedWrite_copy.txt"); ~~~ 参考资料: 1.BufferedWriterapi文档 android_sdk_docs_offline/reference/java/io/BufferedWriter.html 2.BufferedReader文档 android_sdk_docs_offline/reference/java/io/BufferedReader.html 3.BufferedOutputStream与BufferedReader视频 [http://edu.csdn.net/course/detail/805/10967?auto_start=1](http://edu.csdn.net/course/detail/805/10967?auto_start=1)
';