outputstreamwriter 是将字符流转换为字节流的桥梁类,需包装 outputstream(如 fileoutputstream)并显式指定编码(推荐 standardcharsets.utf_8),否则易乱码;必须关闭或刷新才能落盘,推荐 try-with-resources。

OutputStreamWriter 是 Java 中用于将字符流转换为字节流的关键桥梁类,它本身不直接写入磁盘,而是包装一个 OutputStream(如 FileOutputStream),再通过指定的字符编码(如 UTF-8、GBK)将字符转成字节,最终由底层输出流写入文件。
明确指定编码方式
必须在创建 OutputStreamWriter 时传入编码名称(推荐用 StandardCharsets.UTF_8 或字符串 "UTF-8"),否则会使用平台默认编码,极易导致跨环境乱码。
- ✅ 推荐写法(类型安全、无异常):
new OutputStreamWriter(new FileOutputStream("a.txt"), StandardCharsets.UTF_8) - ⚠️ 慎用写法(可能抛
UnsupportedEncodingException):new OutputStreamWriter(new FileOutputStream("a.txt"), "UTF-8")
配合 FileOutputStream 写入磁盘文件
OutputStreamWriter 需要一个真实的字节输出目标。最常见的是用 FileOutputStream 指向磁盘路径,再将其作为构造参数传入。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 示例:写入 UTF-8 编码的文本到
output.txt
try (OutputStreamWriter writer = new OutputStreamWriter(
new FileOutputStream("output.txt"), StandardCharsets.UTF_8)) {
writer.write("你好,世界!");
writer.write("\nHello, World!");
} - 注意:
FileOutputStream默认覆盖写入;如需追加,在构造时传入true:new FileOutputStream("output.txt", true)
务必调用 close() 或使用 try-with-resources
字符可能被内部缓冲区暂存,不关闭或刷新,内容不会真正落盘。
- 自动释放资源(推荐):
使用try (OutputStreamWriter writer = ...),JVM 自动调用close() - 手动控制(不推荐单独用):
writer.flush()强制刷出缓冲区字节;writer.close()关闭并隐式 flush - 若未关闭,程序结束前可能丢失最后几字符
编码兼容性与常见问题
写入编码必须与后续读取编码一致,否则出现乱码。Windows 记事本默认用 GBK 打开无 BOM 的中文文件,但 Java 默认生成 UTF-8(无 BOM),易被误读。
- 写入 GBK(适配旧系统或记事本):
StandardCharsets.GBK或"GBK" - 写入带 BOM 的 UTF-8(让记事本识别)需自行写入
0xEF 0xBB 0xBF前三个字节(OutputStreamWriter不支持自动加 BOM) - 避免用
Charset.defaultCharset()—— 它依赖运行环境,不可靠
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










