IO流之字符流缓冲区:
概念:
流中的缓冲区:是先把程序需要操作的数据保存在内存中,然后我们的程序读写数据的时候,不直接和持久设备之间交互,而改成和内存中的数据进行交互。
缓冲区:它就是临时存储数据,当我们需要操作数据的时候,直接不是面对的是真实保存数据的终端,而是已经把数据缓存起来的那个容器。
字符流缓冲区:是为了高效而设计的。内部维护了一个数组,真正的读写依赖的普通的字符流。
1、BufferedReader类:
常用方法:
字符流缓冲区输入数据步骤:
- 指定文件位置
- 创建字符流输入对象
- 创建缓存区对象
- 调用方法进行读取数据
- 关闭资源
代码案例:
代码:
1 package InputOutput; 2 3 import java.io.BufferedReader; 4 import java.io.FileReader; 5 import java.io.IOException; 6 7 public class BufferedReaderDemo { 8 public static void main(String[] args) throws IOException { 9 // 指定文件路径 10 String path = "E:\JavaCodeDemo\InputOutput\filewriter\BufferedReader.txt"; 11 // 创建字符输入流 12 FileReader reader = new FileReader(path); 13 // 创建字符输入流缓冲区 14 BufferedReader rb = new BufferedReader(reader); 15 String flag = null; 16 // readLine一行一行读取文件 17 while ((flag = rb.readLine()) != null) { 18 System.out.println(flag); 19 } 20 rb.close(); 21 // 流程成功输出Success 22 System.out.println("Success"); 23 } 24 }
重要方法:ReadLine()
2、BufferedWriter类
常用方法:
代码案例:
代码:
1 package InputOutput; 2 3 import java.io.BufferedWriter; 4 import java.io.FileWriter; 5 import java.io.IOException; 6 7 public class BufferedWriterDemo { 8 public static void main(String[] args) throws IOException { 9 // 指定文件位置 10 String path = "E:\JavaCodeDemo\InputOutput\filewriter\BufferedWriter.txt"; 11 // 创建字符输出流 12 FileWriter writer = new FileWriter(path); 13 // 创建字符输出流缓冲区 14 BufferedWriter bw = new BufferedWriter(writer); 15 // 写入 16 for (int i = 0; i < 4; i++) { 17 bw.write("test :" + i); 18 //newLine()实现换行 19 bw.newLine(); 20 } 21 //关闭资源 22 bw.flush(); 23 bw.close(); 24 // 流程成功输出Success 25 System.out.println("Success"); 26 } 27 }
3、字符流缓冲区实现文档复制:
代码案例:
1 package InputOutput; 2 3 import java.io.BufferedReader; 4 import java.io.BufferedWriter; 5 import java.io.FileReader; 6 import java.io.FileWriter; 7 import java.io.IOException; 8 9 //字符输入流和输出流缓冲区实现复制文件 10 public class BufferReaderWriter { 11 public static void main(String[] args) throws IOException { 12 // 指定输入流文件位置 13 String path1 = "E:\JavaCodeDemo\InputOutput\filewriter\BufferedReaderCopy.txt"; 14 // 指定输出流文件位置 15 String path2 = "E:\JavaCodeDemo\InputOutput\filewriter\BufferedWriterCopy.txt"; 16 // 创建字符输入流 17 FileReader reader = new FileReader(path1); 18 // 创建字符输出流 19 FileWriter writer = new FileWriter(path2); 20 // 想追加写入就加上true 21 // FileWriter writer = new FileWriter(path2,true); 22 // 创建输入缓冲区 23 BufferedReader br = new BufferedReader(reader); 24 // 创建输出缓冲区 25 BufferedWriter bw = new BufferedWriter(writer); 26 String flag = null; 27 while ((flag = br.readLine()) != null) { 28 bw.write(flag); 29 bw.newLine(); 30 bw.flush(); 31 } 32 // 关闭资源 33 bw.close(); 34 br.close(); 35 // 流程成功输出Success 36 System.out.println("Success"); 37 } 38 }
注意:因为缓冲区的Close方法会自动调用字符流的Close方法,因此最后关闭资源只需要关闭缓冲区的Close()方法即可!