既然字节流可以复制文件,那么字符流当然也有。
同样的思路:
数据源:
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 // 方式1 10 // int ch = 0; 11 // while ((ch = isr.read()) != -1) { 12 // osw.write(ch); 13 // } 14 15 // 方式2 16 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 }
代码少了很多,简洁明了
时间: 2024-10-11 12:48:56