skywang12345

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
统计
 


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 }
View Code
复制代码

从中,我们可以看出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 }
View Code
复制代码

从中,我们可以看出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\n");
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 }
View Code
复制代码

运行结果
c1=字
buf=流示例0123456

posted on   如果天空不死  阅读(3157)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
 
点击右上角即可分享
微信分享提示