1. 菜鸟级:FileReader(傻瓜相机)
-
怎么用:
FileReader reader = new FileReader("日记.txt"); // 直接读文件
int ch;
while ((ch = reader.read()) != -1) { System.out.print((char)ch); // 一个字一个字读
}
-
特点:
→ 最简单的读文件方式
→ 但默认用系统编码(比如Windows中文版用GBK,Mac用UTF-8)
→ ❌ 文件编码和系统不一致时,会乱码(比如用GBK打开UTF-8文件) -
场景:临时读个小文件,且确定编码没问题时用
-
曼波吐槽:就像用默认美颜滤镜拍照,翻车率50%!(╯▽╰ )
2. 防乱码神器:InputStreamReader(翻译官)
-
怎么用:
// 指定用UTF-8编码读取文件 InputStreamReader reader = new InputStreamReader(new FileInputStream("日记.txt"),"UTF-8" // 明确告诉它用什么语言翻译 );
-
特点:
→ 可以手动指定编码(专治各种乱码)
→ 需要配合FileInputStream
(字节流)使用
→ 依然建议套个BufferedReader加速(见下文) -
场景:读中文文件、爬虫处理不同编码的网页
-
曼波比喻:像带了个翻译官,把乱码字母变成正确文字!(๑•̀ㅂ•́)و✧
3. 加速神器:BufferedReader(搬运工的小推车)
-
怎么用:
BufferedReader reader = new BufferedReader(new FileReader("日记.txt") // 可以套在任何Reader外面 ); String line; while ((line = reader.readLine()) != null) { System.out.println(line); // 一次读一整行! }
-
特点:
→ 自带缓冲区(默认8KB),减少硬盘读取次数
→ 有readLine()
方法,读小说、日志超方便
→ 性能提升明显(尤其读大文件时) -
场景:读小说、日志文件等文本内容
-
曼波小剧场:没有小推车时搬运工要跑100次,有了小推车一次搬一车!(≧∇≦)ノ
4. 内存杀手:StringReader(照镜子)
-
怎么用:
String content = "你好呀~"; StringReader reader = new StringReader(content); // 把字符串当文件读
-
特点:
→ 不用读文件,直接操作字符串
→ 适合把字符串伪装成"文件"来处理 -
场景:测试时代替真实文件、处理内存中的字符串
-
曼波比喻:就像对着镜子里的自己说话,不用找真人~(◕ᴗ◕✿)
选谁?看场景!
场景 | 推荐工具 | 举个栗子🌰 |
---|---|---|
快速读小文件(无中文) | FileReader | 读英文配置文件 |
读含中文的文件 | InputStreamReader + 指定编码 | 读UTF-8编码的小说 |
读大文件 | BufferedReader + InputStreamReader | 分析10GB的日志文件 |
处理字符串 | StringReader | 单元测试中模拟文件内容 |
超重要小贴士
-
关水龙头!
用完一定要.close()
关闭流!或者用try-with-resources
自动关:try (BufferedReader reader = new BufferedReader(...)) { // 自动关闭,不怕忘记~ }
-
乱码急救
中文变问号?用InputStreamReader
明确指定编码:new InputStreamReader(流, "GBK"); // 对付老中文文件
-
性能玄学
读10MB以上文件时,BufferedReader
比直接读快10倍不止!
曼波总结:
- 简单任务用
FileReader
- 防乱码用
InputStreamReader
- 高效读用
BufferedReader
- 其他两个(StringReader/CharArrayReader)存在感较低