Writer是抽象类,需通过子类如FileWriter、StringWriter等实例化;write(char[])写入整个字符数组,write(char[], int, int)写入指定范围;注意刷新或关闭以确保数据写出,避免缓冲问题。

Java 中 Writer 本身是抽象类,不能直接实例化,但它的子类(如 FileWriter、StringWriter、OutputStreamWriter)都提供了写入字符数组的方法。
用 write(char[]) 写入整个字符数组
最常用的方式是调用 write(char[] cbuf) 方法,将整个字符数组内容一次性写入:
char[] data = {'H', 'e', 'l', 'l', 'o'};
try (StringWriter writer = new StringWriter()) {
writer.write(data); // 写入全部5个字符
System.out.println(writer.toString()); // 输出:Hello
}
用 write(char[], int, int) 写入部分字符
如果只需写入数组中某一段,可用重载方法 write(char[] cbuf, int off, int len),指定起始偏移和长度:
char[] data = {'J', 'a', 'v', 'a', ' ', 'I', 's', ' ', 'F', 'u', 'n'};
try (StringWriter writer = new StringWriter()) {
writer.write(data, 0, 4); // 写入前4个:Java
writer.write(data, 5, 2); // 写入第5、6位:Is
writer.write(data, 8, 3); // 写入第9~11位:Fun
System.out.println(writer.toString()); // 输出:JavaIsFun
}
注意字符编码与刷新/关闭
写入操作可能被缓冲,尤其在文件或网络流中。记得调用 flush() 强制输出,或使用 try-with-resources 自动关闭:
立即学习“Java免费学习笔记(深入)”;
- 对
FileWriter或带缓冲的OutputStreamWriter,不关闭或不刷新可能导致数据未真正写入磁盘 - 字符数组中的内容按当前 Writer 的编码(如 UTF-8)写入,无需手动编码
- 写入 null 数组会抛出
NullPointerException;索引越界会抛出IndexOutOfBoundsException


















