FileReader 是用于读取字符流的类,它继承于InputStreamReader。要读取原始字节流,请考虑使用 FileInputStream。
FileWriter 是用于写入字符流的类,它继承于OutputStreamWriter。要写入原始字节流,请考虑使用 FileOutputStream。
转载请注明出处:http://www.cnblogs.com/skywang12345/p/io_22.html
更多内容请参考:java io系列01之 "目录"
FileReader和FileWriter源码分析
1. FileReader 源码(基于jdk1.7.40)

1 package java.io;
2
3 public class FileReader extends InputStreamReader {
4
5 public FileReader(String fileName) throws FileNotFoundException {
6 super(new FileInputStream(fil java io系列21之 InputStreamReader和OutputStreamWritereName));
7 }
8
9 public FileReader(File file) throws FileNotFoundException {
10 super(new FileInputStream(file));
11 }
12
13 public FileReader(FileDescriptor fd) {
14 super(new FileInputStream(fd));
15 }
16 }
从中,我们可以看出FileReader是基于InputStreamReader实现的。
2. FileWriter 源码(基于jdk1.7.40)

1 package java.io;
2
3 public class FileWriter extends OutputStreamWriter {
4
5 public FileWriter(String fileName) throws IOException {
6 super(new FileOutputStream(fileName));
7 }
8
9 public FileWriter(String fileName, boolean append) throws IOException {
10 super(new FileOutputStream(fileName, append));
11 }
12
13 public FileWriter(File file) throws IOException {
14 super(new FileOutputStream(file));
15 }
16
17 public FileWriter(File file, boolean append) throws IOException {
18 super(new FileOutputStream(file, append));
19 }
20
21 public FileWriter(FileDescriptor fd) {
22 super(new FileOutputStream(fd));
23 }
24 }
从中,我们可以看出FileWriter是基于OutputStreamWriter实现的。
示例程序

1 import java.io.File;
2 import java.io.FileInputStream;
3 import java.io.FileOutputStream;
4 import java.io.FileWriter;;
5 import java.io.FileReader;
6 import java.io.IOException;
7
8 /**
9 * FileReader 和 FileWriter 测试程序
10 *
11 * @author skywang
12 */
13 public class FileReaderWriterTest {
14
15 private static final String FileName = "file.txt";
16 private static final String CharsetName = "utf-8";
17
18 public static void main(String[] args) {
19 testWrite();
20 testRead();
21 }
22
23 /**
24 * OutputStreamWriter 演示函数
25 *
26 */
27 private static void testWrite() {
28 try {
29 // 创建文件“file.txt”对应File对象
30 File file = new File(FileName);
31 // 创建FileOutputStream对应FileWriter:将字节流转换为字符流,即写入out1的数据会自动由字节转换为字符。
32 FileWriter out1 = new FileWriter(file);
33 // 写入10个汉字
34 out1.write("字节流转为字符流示例");
35 // 向“文件中”写入"0123456789"+换行符
36 out1.write("0123456789
");
37
38 out1.close();
39
40 } catch(IOException e) {
41 e.printStackTrace();
42 }
43 }
44
45 /**
46 * InputStreamReader 演示程序
47 */
48 private static void testRead() {
49 try {
50 // 方法1:新建FileInputStream对象
51 // 新建文件“file.txt”对应File对象
52 File file = new File(FileName);
53 FileReader in1 = new FileReader(file);
54
55 // 测试read(),从中读取一个字符
56 char c1 = (char)in1.read();
57 System.out.println("c1="+c1);
58
59 // 测试skip(long byteCount),跳过4个字符
60 in1.skip(6);
61
62 // 测试read(char[] cbuf, int off, int len)
63 char[] buf = new char[10];
64 in1.read(buf, 0, buf.length);
65 System.out.println("buf="+(new String(buf)));
66
67 in1.close();
68 } catch(IOException e) {
69 e.printStackTrace();
70 }
71 }
72 }
运行结果:
c1=字
buf=流示例0123456