1. 转换流的简化写法:
由于我们常见的操作都是使用本地默认编码,所以,不用指定编码。
而转换流的名称有点长,所以,Java就提供了其子类供我们使用:FileReader / FileWriter
OutputStreamWriter = FileOutputStream + 编码表(GBK)
FileWriter = FileOutputStream + 编码表(GBK)
InputStreamReader = FileInputStream + 编码表(GBK)
FileReader = FileInputStream + 编码表(GBK)
2. FileReader / FileWriter两者的构造方法:
(1)FileReader的构造方法
构造方法摘要 | |
---|---|
FileReader(File file) 在给定从中读取数据的 File 的情况下创建一个新 FileReader。 |
|
FileReader(FileDescriptor fd) 在给定从中读取数据的 FileDescriptor 的情况下创建一个新 FileReader。 |
|
FileReader(String fileName) 在给定从中读取数据的文件名的情况下创建一个新 FileReader。 |
(2)FileWriter的构造方法
构造方法摘要 | |
---|---|
FileWriter(File file) 根据给定的 File 对象构造一个 FileWriter 对象。 |
|
FileWriter(File file, boolean append) 根据给定的 File 对象构造一个 FileWriter 对象。 |
|
FileWriter(FileDescriptor fd) 构造与某个文件描述符相关联的 FileWriter 对象。 |
|
FileWriter(String fileName) 根据给定的文件名构造一个 FileWriter 对象。 |
|
FileWriter(String fileName, boolean append) 根据给定的文件名以及指示是否附加写入数据的 boolean 值来构造 FileWriter 对象。 |
3. 需求:把当前项目目录下的a.txt内容复制到当前项目目录下的b.txt中
数据源:
a.txt -- 读取数据 -- 字符转换流 -- InputStreamReader -- FileReader
目的地:
b.txt -- 写出数据 -- 字符转换流 -- OutputStreamWriter -- FileWriter
4. 代码示例:
1 package cn.itcast_04; 2 3 import java.io.FileReader; 4 import java.io.FileWriter; 5 import java.io.IOException; 6 7 /* 8 * 需求:把当前项目目录下的a.txt内容复制到当前项目目录下的b.txt中 9 * 10 * 数据源: 11 * a.txt -- 读取数据 -- 字符转换流 -- InputStreamReader -- FileReader 12 * 目的地: 13 * b.txt -- 写出数据 -- 字符转换流 -- OutputStreamWriter -- FileWriter 14 */ 15 public class CopyFileDemo2 { 16 public static void main(String[] args) throws IOException { 17 // 封装数据源 18 FileReader fr = new FileReader("a.txt"); 19 // 封装目的地 20 FileWriter fw = new FileWriter("b.txt"); 21 22 // 一次一个字符 23 // int ch = 0; 24 // while ((ch = fr.read()) != -1) { 25 // fw.write(ch); 26 // } 27 28 // 一次一个字符数组 29 char[] chs = new char[1024]; 30 int len = 0; 31 while ((len = fr.read(chs)) != -1) { 32 fw.write(chs, 0, len); 33 fw.flush(); 34 } 35 36 // 释放资源 37 fw.close(); 38 fr.close(); 39 } 40 }
运行结果,如下: