处理流之一:缓冲流
缓冲流:
BufferedInputStream BufferedOutputStream BufferedReader BufferedWriter
作用:
提高流的读取,写入的速度。
提高读写速度的原因:内部提供了一个缓冲区。
处理流就是’'套接"在已有的流的基础上
上代码:
注释都已经在代码中给出
一、实现非文本文件的复制操作
@Test public void test1() { BufferedInputStream bis = null; BufferedOutputStream bos = null; try { //1.造文件 File file = new File("工作二维码.png"); File file1 = new File("工作二维码2.png"); //2.造流 //2.1造节点流 FileInputStream fis = new FileInputStream(file); FileOutputStream fos = new FileOutputStream(file1); //2.2造缓冲流 bis = new BufferedInputStream(fis); bos = new BufferedOutputStream(fos); //3.复制的细节:读取,写入 byte[] buffer = new byte[5]; int len; while ((len = bis.read(buffer)) != -1) { bos.write(buffer, 0, len); } } catch (Exception e) { e.printStackTrace(); } finally { //4.关闭资源 //要求:先关闭外层的流,再关闭内层的流 //在关闭外层流的同时,内层的流也会自动关闭,所以关于内层流的关闭,我们可以省略。 if (bis !=null){ try { bis.close(); } catch (IOException e) { e.printStackTrace(); } } if (bos!=null){ try { bos.close(); } catch (IOException e) { e.printStackTrace(); } } } }
一、BufferedWriter的使用代码如下:
/** * 演示BufferedWriter的使用 */ public class BufferedWriter_ { public static void main(String[] args) { String filePath = "D:\\ok.txt"; BufferedWriter bufferedWriter = null; try { //1.new FileWriter(filePath,true) 表示以追加的方式写入 //2.new FileWriter(filePath) 表示以覆盖的方式写入 bufferedWriter = new BufferedWriter(new FileWriter(filePath)); bufferedWriter.write("hello,北京!"); bufferedWriter.newLine(); //插入一个和系统相关的换行符 bufferedWriter.write("hello1,北京!"); bufferedWriter.newLine(); //插入一个和系统相关的换行符 bufferedWriter.write("hello2,北京!"); } catch (IOException e) { e.printStackTrace(); } finally { try { if (bufferedWriter != null) { bufferedWriter.close(); } } catch (IOException e) { e.printStackTrace(); } } } }
二、BufferedReader的使用详解代码如下:
/** * 演示BufferedReader的使用 */ public class BufferedReader_ { public static void main(String[] args) { String filePath = "D:\\story.txt"; //创建BufferedReader BufferedReader bufferedReader = null; try { bufferedReader = new BufferedReader(new FileReader(filePath)); //读取 String line; //按行读取,效率高 //说明 //1.bufferedReader.readLine() 是按行读取文件 //2.当返回null时,表示文件读取完毕 while ((line = bufferedReader.readLine()) != null) { System.out.println(line); } } catch (IOException e) { e.printStackTrace(); } finally { try { if (bufferedReader != null) { //关闭流,这里注意,只需要关闭BufferedReader,因为底层会自动去关闭节点流FileReader。 /** * public void close() throws IOException { * synchronized (lock) { * if (in == null) * return; * try { * in.close();//in 就是我们传入的 new FileReader(filePath),关闭了。 * } finally { * in = null; * cb = null; * } * } * } */ bufferedReader.close(); } } catch (IOException e) { e.printStackTrace(); } } } }
使用BufferedWriter和BufferedReader实现文本文件的复制
@Test public void testBufferedReaderBufferedWriter() { BufferedReader bufferedReader = null; BufferedWriter bufferedWriter = null; try { //创建文件和相应的缓冲流 bufferedReader = new BufferedReader(new FileReader(new File("学习记录.txt"))); bufferedWriter = new BufferedWriter(new FileWriter(new File("学习记录4.txt"))); //复制文件:读取和写入 //方式一:使用char[]数组 // char[] chars = new char[1024]; // int len; // while ((len = bufferedReader.read(chars)) != -1) { // bufferedWriter.write(chars, 0, len); // } //方式二:使用String String data; while ((data=bufferedReader.readLine())!=null){ // bufferedWriter.write(data+"\n"); bufferedWriter.write(data);//data中不包含换行符 bufferedWriter.newLine();//提供换行的操作 } } catch (IOException e) { e.printStackTrace(); } finally { //关闭资源 if (bufferedReader != null) { try { bufferedReader.close(); } catch (IOException e) { e.printStackTrace(); } } if (bufferedWriter != null) { try { bufferedWriter.close(); } catch (IOException e) { e.printStackTrace(); } } } }