Java Writer 类
最后修改时间:2025 年 4 月 16 日
java.io.Writer 类是一个用于写入字符流的抽象类。 它是所有字符输出流类的超类。 该类提供了用于写入单个字符、字符数组和字符串的方法。
Writer 实现了 AutoCloseable、Flushable 和 Appendable 接口。 子类必须实现 write、flush 和 close 方法。 Writers 可以被缓冲以获得更好的性能。
Writer 类概述
Writer 提供了用于字符输出操作的基本方法。 关键方法包括各种写入操作、刷新和关闭流。 该类在内部处理字符编码转换。
public abstract class Writer implements Appendable, Closeable, Flushable {
protected Object lock;
protected Writer();
protected Writer(Object lock);
public void write(int c);
public void write(char[] cbuf);
public abstract void write(char[] cbuf, int off, int len);
public void write(String str);
public void write(String str, int off, int len);
public Writer append(CharSequence csq);
public Writer append(CharSequence csq, int start, int end);
public Writer append(char c);
public abstract void flush();
public abstract void close();
}
上面的代码显示了 Writer 提供的关键方法。 这些方法允许将字符数据写入各种目的地。 该类使用同步来保证线程安全,使用显式的锁对象或 Writer 实例本身。
创建 FileWriter
FileWriter 是一个常用的 Writer 子类,用于写入字符文件。 它使用默认的字符编码和缓冲区大小。 为了获得更多控制,可以使用 OutputStreamWriter 包装 FileOutputStream。
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
public class Main {
public static void main(String[] args) {
try {
// Create FileWriter with default settings
Writer writer1 = new FileWriter("output1.txt");
// Create FileWriter with append mode
Writer writer2 = new FileWriter("output2.txt", true);
// Write some data
writer1.write("Hello, FileWriter!");
writer2.append("\nAppended line");
System.out.println("Files written successfully");
// Close writers
writer1.close();
writer2.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
此示例演示了创建 FileWriter 实例。 第一个覆盖现有文件,第二个附加到它们。 始终关闭 writers 以确保数据被刷新并释放资源。 append 方法提供了一个流畅的接口。
写入字符和字符串
Writer 提供了多种用于写入字符数据的方法。 您可以写入单个字符、字符数组或字符串。 通过偏移量和长度参数支持部分写入。
import java.io.StringWriter;
import java.io.Writer;
public class Main {
public static void main(String[] args) {
try (Writer writer = new StringWriter()) {
// Write single character
writer.write('J');
// Write character array
char[] chars = {'a', 'v', 'a'};
writer.write(chars);
// Write partial character array
writer.write(chars, 1, 2);
// Write string
writer.write(" Programming");
// Write partial string
writer.write(" is fun!", 3, 4);
System.out.println("Result: " + writer.toString());
} catch (Exception e) {
e.printStackTrace();
}
}
}
此示例显示了使用 StringWriter 的各种写入操作。 输出将所有写入的数据组合成一个字符串。 部分写入演示了选择数组和字符串的一部分。 StringWriter 适用于在内存中构建字符串。
使用 BufferedWriter
BufferedWriter 包装另一个 Writer 以缓冲输出。 这通过减少原生 I/O 操作来提高性能。 默认缓冲区大小为 8192 个字符,但可以自定义。
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
public class Main {
public static void main(String[] args) {
try (Writer fileWriter = new FileWriter("buffered.txt");
BufferedWriter writer = new BufferedWriter(fileWriter)) {
// Write lines with newLine()
writer.write("First line");
writer.newLine();
writer.write("Second line");
writer.newLine();
// Write multiple characters
writer.write("Third line with some extra text");
// Flush explicitly (not needed with try-with-resources)
writer.flush();
System.out.println("Data written to buffered.txt");
} catch (IOException e) {
e.printStackTrace();
}
}
}
此示例演示了使用 BufferedWriter 进行高效写入。 newLine 方法写入特定于平台的行分隔符。 缓冲区在满或关闭时自动刷新。 显式刷新可确保立即写入数据。
使用 Writer 进行追加
Appendable 接口提供了 append 方法,用于方便地写入。 这些方法返回 Writer 实例,从而实现方法链。 它们可以写入 CharSequence 对象或单个字符。
import java.io.StringWriter;
import java.io.Writer;
public class Main {
public static void main(String[] args) {
try (Writer writer = new StringWriter()) {
// Chain append operations
writer.append("Hello")
.append(' ')
.append("World")
.append("!")
.append('\n')
.append("Java ")
.append("Writer ", 0, 6)
.append("example");
System.out.println(writer.toString());
} catch (Exception e) {
e.printStackTrace();
}
}
}
此示例显示了使用 append 操作进行方法链。 append 方法比 write 更灵活,因为它们接受任何 CharSequence。 通过开始和结束参数支持部分追加。 结果在内存中高效构建。
使用 OutputStreamWriter
OutputStreamWriter 将字节流桥接到字符流。 它使用指定的字符集将字符转换为字节。 当您需要控制输出的字符编码时,这很有用。
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.nio.charset.StandardCharsets;
public class Main {
public static void main(String[] args) {
try (Writer writer = new OutputStreamWriter(
new FileOutputStream("encoded.txt"), StandardCharsets.UTF_8)) {
// Write text with specified encoding
writer.write("UTF-8 encoded text: ");
writer.write("こんにちは"); // Japanese hello
writer.write(" привет"); // Russian hello
writer.write(" 你好"); // Chinese hello
System.out.println("Text written with UTF-8 encoding");
} catch (IOException e) {
e.printStackTrace();
}
}
}
此示例演示了使用特定字符编码写入文本。 OutputStreamWriter 使用 UTF-8 将字符转换为字节。 这对于正确处理非 ASCII 字符至关重要。 生成的文件将包含正确编码的多语言文本。
来源
在本文中,我们介绍了 Java Writer 类的基本方法和特性。 理解这些概念对于在 Java 应用程序中使用字符输出操作至关重要。
作者
列出所有Java教程。