writer 是 java 中用于按字符写入文本的抽象基类,需通过 filewriter 或 outputstreamwriter 等子类实现;支持编码指定、追加模式和自动缓冲,推荐用 try-with-resources 管理资源并显式指定 utf-8 编码。

Writer 是 Java 中用于按字符写入文本的抽象基类,不能直接实例化,需使用其子类(如 FileWriter、OutputStreamWriter)来向文件写入字符内容。它以字符(char)为单位操作,自动处理字符编码,比字节流更适配文本场景。
常用实现类:FileWriter
最简单的方式是用 FileWriter,它直接关联文件路径,支持字符写入:
- 默认使用系统默认编码(不推荐),也可指定编码(JDK 11+ 支持构造时传
Charset) - 可选择是否追加模式(第二个参数设为
true) - 必须手动关闭流,或使用 try-with-resources 自动释放资源
示例:
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
try (FileWriter writer = new FileWriter("output.txt", true)) {
writer.write('H'); // 写入单个字符
writer.write("ello"); // 写入字符串
writer.write('\n'); // 换行
writer.flush(); // 强制刷出缓冲区(非必须,close 会自动 flush)
} catch (IOException e) {
e.printStackTrace();
}
带编码控制:OutputStreamWriter + FileOutputStream
若需精确指定字符编码(如 UTF-8),推荐组合使用 OutputStreamWriter 和 FileOutputStream:
-
FileOutputStream负责字节写入文件 -
OutputStreamWriter作为桥接器,将字符转为指定编码的字节 - JDK 11+ 可直接传
StandardCharsets.UTF_8;旧版本用"UTF-8"字符串
示例:
try (OutputStreamWriter writer = new OutputStreamWriter(
new FileOutputStream("output.txt"), StandardCharsets.UTF_8)) {
writer.write("你好,World!\n");
} catch (IOException e) {
e.printStackTrace();
}
写入时的关键细节
-
write(int c)参数是int,但只取低 16 位作为char,高 16 位被忽略 -
write(char[] cbuf)和write(String str)更常用,效率高于逐字符写入 - 缓冲机制存在:内容可能暂存内存中,调用
flush()或close()才真正落盘 - 写入换行符建议用
System.lineSeparator(),而非硬写"\n",以适配不同系统
避免常见错误
- 忘记关闭流 → 文件残留或内容丢失 → 务必用 try-with-resources
- 编码不一致 → 中文乱码 → 显式指定 UTF-8,尤其跨平台时
- 误用字节流方法(如
FileOutputStream.write(byte[]))写字符串 → 出现乱码或异常 → 确认用的是Writer体系 - 在循环中频繁创建/关闭
FileWriter→ 性能差 → 打开一次,批量写入,再关闭
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










