java中writer是字符输出流抽象基类,用于文本数据操作,需通过filewriter、outputstreamwriter等子类实例化,推荐用outputstreamwriter指定utf-8编码并配合bufferedwriter提升性能。

Java 中用 Writer 写入字符,本质是使用**字符流**(而非字节流),它自动处理字符编码转换,适合文本数据操作。
Writer 是字符输出流的抽象基类
Writer 本身不能直接实例化,需使用其子类,如:
-
FileWriter:向文件写入字符(默认使用平台默认编码) -
OutputStreamWriter:将字节输出流(如FileOutputStream)包装成字符流,可指定编码(推荐) -
BufferedWriter:提供缓冲功能,提升写入效率,常与上述类配合使用 -
StringWriter:写入到内存中的字符串缓冲区
基本写入步骤(以 FileWriter 为例)
1. 创建 Writer 实例(注意是否覆盖或追加)
2. 调用 write() 方法(支持 char、char[]、String、带 offset/length 的重载)
3. 调用 flush() 确保内容写出(尤其使用缓冲时)
4. 调用 close() 释放资源(建议用 try-with-resources)
示例:
try (FileWriter writer = new FileWriter("output.txt", true)) { // true 表示追加
writer.write("你好,世界!\n");
writer.write("第二行内容。");
} catch (IOException e) {
e.printStackTrace();
}
推荐方式:OutputStreamWriter + 指定编码
FileWriter 不支持显式指定编码,容易因平台差异导致乱码。更可靠的做法是:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 用
FileOutputStream打开文件(字节流底层) - 用
OutputStreamWriter包装它,并传入编码名(如"UTF-8") - 再套一层
BufferedWriter提升性能
示例:
try (BufferedWriter writer = new BufferedWriter(
new OutputStreamWriter(
new FileOutputStream("data.txt"), "UTF-8"))) {
writer.write("中文不会乱码");
writer.newLine(); // 写换行符(跨平台安全)
writer.write("数字:" + 123);
} catch (IOException e) {
e.printStackTrace();
}
注意区分字节流和字符流的适用场景
用字符流(Writer / Reader):处理纯文本(.txt、.csv、.json、.xml 等),关注“字符”语义,自动编码转换。
用字节流(OutputStream / InputStream):处理图片、音频、视频、ZIP、序列化对象等二进制数据,或需要精确控制每个字节时。
二者不可混用:不要把字符串直接丢给 FileOutputStream.write()(会调用 String.getBytes(),编码不确定);也不要用 FileWriter 写二进制数据(会损坏内容)。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










