OutputStreamWriter通过指定编码(如UTF-8)将字符转字节写入输出流,推荐用StandardCharsets.UTF_8构造,配合try-with-resources确保资源释放,并注意write()不自动换行。

在 Java 中,OutputStreamWriter 是连接字节流(如 FileOutputStream)和字符流的桥梁,它能将字符按指定编码转换为字节写入底层输出流。关键在于**构造时传入编码名称(如 "UTF-8")**,而不是依赖平台默认编码。
1. 使用字符串编码名创建 OutputStreamWriter
最常用的方式是通过带 Charset 或编码名(String)的构造方法指定编码:
- 推荐用
StandardCharsets.UTF_8(Java 7+),类型安全、无异常:
- 也可传编码名称字符串,但需捕获
UnsupportedEncodingException(虽 UTF-8/GBK 等基本都支持):
2. 完整写入示例(含资源自动关闭)
务必使用 try-with-resources 确保流正确关闭,避免乱码或文件损坏:
分析 Java Spring Boot 后端 Controller 代码,自动生成 Markdown 格式的接口文档。当用户说“生成 Java 接口文档”、“生成 API 文档”、“从 Spring 代码生成文档”时触发。
new FileOutputStream("output.txt"), StandardCharsets.UTF_8)) {
writer.write("你好,世界!");
writer.write("\n");
writer.write("Hello, World!");
}
⚠️ 注意:write() 不会自动换行,\n 是换行符;如需跨平台换行,可用 System.lineSeparator()。
立即学习“Java免费学习笔记(深入)”;
3. 常见编码注意事项
- UTF-8:推荐首选,兼容中文且无 BOM(除非显式写入),适合大多数场景
- GBK / GB2312:Windows 中文系统常用,读写旧文本时需匹配,否则出现“?”或乱码
- ISO-8859-1:不支持中文,仅用于拉丁字母,慎用
- 编码名大小写不敏感(
"utf-8"、"UTF8"都可),但建议统一用"UTF-8"标准写法
4. 避免默认编码陷阱
不要用无参构造方法:new OutputStreamWriter(new FileOutputStream("x.txt"))——它会使用 Charset.defaultCharset(),该值随运行环境变化(如 Windows 可能是 GBK,Linux 可能是 UTF-8),极易导致协作或部署时乱码。显式指定编码是健壮性的基本要求。

















