在java中,printwriter 是处理文本输出的首选工具,它支持自动刷新和格式化输出。要使用它,只需将目标流(如 fileoutputstream 或 system.out)作为参数传入构造函数,并设置 autoflush 为 true 以确保数据实时写入。这样既能利用字节流的底层传输能力,又能享受字符流的高级格式化功能。

如何创建带自动刷新的 PrintWriter 实例
创建 PrintWriter 时,必须指定目标流和是否启用自动刷新。如果 autoFlush 设为 true,则在调用 println()、printf() 或 format() 后,缓冲区内容会自动刷新到目标流。这是确保输出即时可见的关键配置。

import java.io.*;
public class PrintWriterDemo {
public static void main(String[] args) throws IOException {
// 创建指向标准输出的 PrintWriter,启用自动刷新
PrintWriter out = new PrintWriter(System.out, true);
// 使用 println 输出字符串
out.println("Hello, World!");
// 使用 printf 进行格式化输出
out.printf("Number: %d, String: %s%n", 42, "Test");
// 关闭资源
out.close();
}
}运行上述代码,控制台将立即显示两行文本:第一行为 "Hello, World!",第二行为 "Number: 42, String: Test"。由于启用了自动刷新,无需手动调用 flush() 即可看到结果。
立即学习“Java免费学习笔记(深入)”;
如何将 PrintWriter 与文件输出结合使用
将 PrintWriter 与文件输出结合时,通常通过 FileOutputStream 或 Files.newBufferedWriter() 实现。推荐使用 Files.newBufferedWriter(),因为它能更好地处理字符编码和缓冲机制,避免乱码问题。

import java.io.*;
import java.nio.file.*;
public class FilePrintWriterDemo {
public static void main(String[] args) throws IOException {
Path filePath = Paths.get("output.txt");
// 使用 Files.newBufferedWriter 创建 BufferedWriter,再包装为 PrintWriter
try (BufferedWriter writer = Files.newBufferedWriter(filePath, StandardCharsets.UTF_8)) {
PrintWriter out = new PrintWriter(writer, true);
out.println("Writing to file...");
out.printf("Date: %s%n", java.time.LocalDate.now());
out.close();
}
System.out.println("File written successfully.");
}
}执行该程序后,会在当前目录下生成 output.txt 文件,内容为 "Writing to file..." 和当前日期。由于使用了 try-with-resources 结构,即使发生异常,资源也会被正确关闭,防止内存泄漏。
当 PrintWriter 未启用自动刷新时会发生什么
如果 PrintWriter 未启用自动刷新(即 autoFlush 为 false),则数据会保留在内部缓冲区中,直到缓冲区满、显式调用 flush() 或 close() 时才被写出。这可能导致输出延迟或丢失,特别是在程序意外终止时。


















