首页 > 代码库 > java 21 - 4 字符流的文件复制操作以及简化

java 21 - 4 字符流的文件复制操作以及简化

既然字节流可以复制文件,那么字符流当然也有。

同样的思路: 

数据源:
    a.txt -- 读取数据 -- 字符转换流 -- InputStreamReader
目的地:
    b.txt -- 写出数据 -- 字符转换流 -- OutputStreamWriter

 1         // 封装数据源 2         InputStreamReader isr = new InputStreamReader(new FileInputStream( 3                 "a.txt")); 4         // 封装目的地 5         OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream( 6                 "b.txt")); 7  8         // 读写数据 9         // 方式110         // int ch = 0;11         // while ((ch = isr.read()) != -1) {12         // osw.write(ch);13         // }14 15         // 方式216         char[] chs = new char[1024];17         int len = 0;18         while ((len = isr.read(chs)) != -1) {19             osw.write(chs, 0, len);20             // osw.flush();21         }22 23         // 释放资源24         osw.close();25         isr.close();

 

简化:

  我们常用的编码表大都是使用本地默认的编码表,也就是GBK。所以呢,我们可以不指定编码表。

同时,字符流的名称有些长...好长,所以呢,Java就提供了字符流的子类给我们使用:

 

之前用的字符流:

  OutputStreamWriter = FileOutputStream + 编码表(GBK)

  InputStreamReader = FileInputStream + 编码表(GBK)

使用它的子类:

  FileWriter = FileOutputStream + 编码表(GBK)

  FileReader = FileInputStream + 编码表(GBK)

 

来,使用简化版重新做复制:

 1         //封装数据源 2         FileReader fr = new FileReader("a.txt"); 3         //封装目的地 4         FileWriter fw = new FileWriter("b.txt"); 5          6         //使用一次读取一个字符数组的方式来复制 7         int len = 0; 8         char[] ch = new char[1024]; 9         while((len = fr.read(ch)) != -1){10             fw.write(ch,0,len);11         }12         //释放资源13         fw.close();14         fr.close();15     }

  代码少了很多,简洁明了

 

java 21 - 4 字符流的文件复制操作以及简化