可直接调用write(String)写入字符串,无需转char[];支持指定起始位置和长度;比write(char[])更高效安全;注意flush和close时机,推荐try-with-resources;勿误用write(int)处理emoji等代理对字符。

可以直接调用 Writer 的 write(String) 方法写入字符串,无需手动转成 char[] 数组。
使用 write(String) 方法最简洁
绝大多数 Writer 子类(如 FileWriter、OutputStreamWriter、StringWriter)都重载了 write(String) 方法,内部已自动处理字符串到字符序列的转换:
- 传入普通字符串即可,例如
writer.write("Hello, 世界"); - 支持指定起始位置和长度:
writer.write(str, 2, 5)(从索引 2 开始写 5 个字符) - 比先调用
str.toCharArray()再用write(char[])更高效、更安全(避免意外修改原数组)
注意 flush 和 close 的时机
Writer 是带缓冲的,写入后内容可能暂存于内存中:
- 调用 flush() 强制把缓冲区内容写出到底层目标(如文件、网络流)
- 调用 close() 会自动 flush 并释放资源;若不 close,可能导致数据丢失或文件不完整
- 推荐用 try-with-resources 自动管理,例如:
try (FileWriter w = new FileWriter("out.txt")) {<br> w.write("一行文本");<br> w.write("\n第二行");<br>} // 自动 close + flush
避免常见误区
不要误用 write(int),它只写单个 Unicode 码点(常被误解为写字符):
-
writer.write('A')→ 正确,写入字符 'A' -
writer.write("A")→ 正确,写入字符串 "A" -
writer.write(65)→ 写入码点 65(即 'A'),但若传入 0x1F600(?),可能只写高位导致乱码 - 对含代理对(surrogate pairs)的字符串(如 emoji),必须用 write(String),不能拆成 int 写










