1 package day9.lesson2;
2
3 import java.io.*;
4
5 /*
6 2.7 案例-字符流复制Java文件
7 根据数据源创建字符输入流对象
8 根据目的地创建字符输出流对象
9 读写数据,复制文件
10 释放资源
11 */
12 public class CopyJavaDemo01 {
13 public static void main(String[] args) throws IOException {
14 InputStreamReader isr = new InputStreamReader(new FileInputStream("stage2\\src\\day9\\lesson2\\StringDemo.java"));
15 OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("stage2\\day9_lesson2_copy\\CopyStringDemo.java"));
16
17 //一次读一个字符数据
18 /*int ch;
19 while ((ch=isr.read()) != -1){
20 osw.write(ch);
21 }*/
22
23 //一次读一个字符数组数据
24 char[] chs = new char[1024];
25 int len;
26 while ((len=isr.read(chs)) != -1){
27 osw.write(chs, 0, len);
28 }
29
30 osw.close();
31 isr.close();
32 }
33 }
1 package day9.lesson2;
2
3 import java.io.FileReader;
4 import java.io.FileWriter;
5 import java.io.IOException;
6
7 /*
8 2.8 案例-字符流复制Java文件(改进版)
9
10 转换流(InputStreamReader & OutputStreamWriter)的名字较长,
11 而我们常见的操作都是按照本地默认编码实现的,
12 为了简化书写,转换流提供了对应的子类
13 PS:此处“常见操作”不含编解码转换,编解码转换时还得严格用转换流实现
14
15 FileReader (extends InputStreamReader)
16 用于读取字符文件的便捷类
17 构造方法:FileReader(String fileName)
18 FileWriter (extends OutputStreamWriter)
19 用于写入字符文件的便捷类
20 构造方法:FileWriter(String fileName)
21
22 分析
23 xxx.java(数据源) --- 读数据 --- Reader(抽象类) --- InputStreamReader(实现类) --- FileReader(便捷类)
24 xxx.java(目的地) --- 写数据 --- Writer(抽象类) --- OutputStreamWriter(实现类) --- FileWriter(便捷类)
25 */
26 public class CopyJavaDemo02 {
27 public static void main(String[] args) throws IOException {
28 FileReader fr = new FileReader("stage2\\src\\day9\\lesson2\\StringDemo.java");
29 FileWriter fw = new FileWriter("stage2\\day9_lesson2_copy\\CopyStringDemo.java");
30
31 //方式1
32 /*int ch;
33 while ((ch=fr.read()) != -1){
34 fw.write(ch);
35 }*/
36
37 //方式2
38 char[] chars = new char[1024];
39 int len;
40 while ((len=fr.read(chars)) != -1){
41 fw.write(chars, 0, len);
42 }
43
44 fw.close();
45 fr.close();
46 }
47 }