93.节点流处理流
节点流可以从一个特定的数据源读写数据,如FileReader、FileWriter
处理流(也叫包装流)是“连接”在已存在的流(节点流或处理流)之上,为程序提供更为强大的读写功能,如BufferedReader、BufferedWriter
区别和联系:
-
节点流是底层流/低级流,直接跟数据源相接
-
处理流包装节点流,既可以消除不同节点流的实现差异,也可以提供更方便的方法来完成输入输出
-
处理流对节点流进行包装,使用了修饰器设计模式,不会直接与数据源相连
处理流的功能主要体现在以下两个方面:
-
性能的提高:主要以增加缓冲的方式来提高输入输出的效率
-
操作的便捷:处理流可能提供了一系列便捷的方法来一次输入输出大批量的数据,使用更加灵活方便
95.BufferedReadr
其属于字符流,是按照字符读取的,关闭时,只需要关闭外层流即可
//使用BufferedReader读取文本文件,并显示在控制台 public class BufferedReader_ { public static void main(String[] args) throws Exception{ String filePath = "d:\\a.java"; //创建BufferedReader对象 BufferedReader bufferedRread = new BufferedReader(new FileReader(filePath)); //读取 String line;//按行读取,效率高 //当返回null时,表示文件读取完毕 while(line = bufferedReader.readLine() != null){ System.out.println(line); } //关闭流,这里注意,只需要关闭BufferedReader,因为底层会自动关闭节点流 bufferedReader.close(); } }
96.BufferedWriter
//用BufferedWriter将“Hello,World”写入到文件中 public class BufferedWriter_ { public static void main(String[] args) throws Exception{ String filePath = "d:\\ok.txt"; //创建BufferedWriter对象 BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(filePath)); bufferedWriter.write("HelloWorld") //插入一个换行 bufferedWrite.newLine(); //关闭外层流即可,传入的FileWriter(filePath)会在底层关闭 bufferedWriter.close(); } }
综合使用BufferedReader和BufferedWriter完成文本文件拷贝
public class BufferedCopy_ { public static void main(String[] args){ //BufferedReader和BufferedWriter是按照字符操作 //不要去操作二进制文件,可能造成文件损坏 String srcFilePath = "d:\\a.java"; String desFilePath = "d:\\a2.java"; BufferedReader br = null; BufferedWriter bw = null; String line; try{ br = new BufferedReader(new FileReader(srcFilePath)) bw = new BufferedWriter(new FileWriter(desFilePath)) //readLine读取一行内容,但没有换行 while((line = br.readLine() != null){ //每读取一行,就写入 bw.write(line); //插入换行 bw.newLine(); } } catch (IOException e) { e.printStackTrace(); } finally { //关闭流 try{ if(br != null){ br.close(); } if(bw != null){ bw.close(); } } catch (IOException e) { e.printStackTrace(); } } } }