java流处理需先明确字节流与字符流分工:字节流(inputstream/outputstream)处理原始二进制数据,适合图片、音频等;字符流(reader/writer)专攻文本,自动处理编码,适合txt、json等。

Java 中流处理不是一上来就猛敲代码,而是先理清“谁往哪儿送、送什么、怎么送不丢件”。核心就两点:分清字节流和字符流的分工,再掌握它们在实际场景中怎么用。
先搞懂流的两个基本阵营
别被“输入输出”绕晕——记住一个参照物:内存。所有操作都以它为中转站。
- 字节流(InputStream / OutputStream):搬原始数据,不管内容是什么。图片、音频、zip包、二进制配置文件,全靠它。一次处理一个字节(8 bit),底层最直接,但读中文容易乱码。
- 字符流(Reader / Writer):专攻文本。一次处理一个字符(通常是 Unicode),自动处理编码转换。.txt、.json、.xml 这类纯文本文件,用它更安全、更省心。
从写文件开始练手:FileOutputStream 是第一个工具
这是最贴近“把东西存到硬盘”的直觉操作。新手常踩的坑就三个:
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
- 创建 FileOutputStream("a.txt") 时,如果文件已存在,默认会清空内容——想追加得加第二个参数 true,比如 new FileOutputStream("a.txt", true)。
- 写完必须调用 close()。不关流,文件可能一直被占用,删不掉、改不了。
- 写中文?别用 write(int) 直接写字符串,它只认字节。要么转成字节数组再写,要么直接上 FileWriter(字符流)。
读文件别硬扛:FileInputStream + 缓冲才是正解
直接用 read() 逐字节读,效率低还容易卡。实用做法是配合字节数组批量读:
- 声明一个 byte[] buffer = new byte[1024];
- 用 int len = fis.read(buffer) 读取,返回实际读到的字节数;
- 用 new String(buffer, 0, len, "UTF-8") 转成字符串(注意指定编码);
- 循环直到 len == -1,表示读完了。
等熟悉了,再升级用 BufferedInputStream,它内部自带缓冲区,读起来更顺滑。
文本文件优先选字符流:FileReader / FileWriter 更省事
处理 .log、.csv、.properties 这类文件,直接上字符流,避开编码烦恼:
- FileWriter fw = new FileWriter("data.txt") 写文本,自动按系统默认编码(但建议显式指定 new OutputStreamWriter(new FileOutputStream(...), "UTF-8"));
- 读的时候用 FileReader 或更推荐的 InputStreamReader 配合 BufferedReader,支持 readLine() 一行行读,不用自己切换换行符;
- 记得 try-with-resources 写法,让 JVM 自动关流,避免忘记 close 导致资源泄漏。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










