JavaSE-18.2.4【案例-字符流复制Java文件(基础版实现、改进版实现)】
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 }