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教程。