Java PrintWriter 类
最后修改时间:2025 年 4 月 16 日
java.io.PrintWriter
类为字符流提供格式化输出功能。 它实现了 PrintStream 中的所有 print 方法,但不抛出 I/O 异常。 PrintWriter 可以包装各种输出目标。
PrintWriter
支持在调用 println 方法时自动刷新。 它使用适当的区域设置约定将原始值转换为字符串。 与 PrintStream 不同,PrintWriter 使用适当的字符编码进行文本输出。
PrintWriter 类概述
PrintWriter
扩展了 Writer
并提供了格式化的打印功能。 主要方法包括各种 print 和 println 方法、格式化支持和流控制。 它自动处理字符转换和缓冲。
public class PrintWriter extends Writer { public PrintWriter(Writer out); public PrintWriter(Writer out, boolean autoFlush); public PrintWriter(OutputStream out); public PrintWriter(OutputStream out, boolean autoFlush); public PrintWriter(String fileName) throws FileNotFoundException; public PrintWriter(File file) throws FileNotFoundException; public void print(boolean b); public void print(char c); public void print(int i); public void print(long l); public void print(float f); public void print(double d); public void print(char[] s); public void print(String s); public void print(Object obj); public void println(); public void println(boolean x); // Other println methods... public PrintWriter printf(String format, Object... args); public PrintWriter format(String format, Object... args); public void flush(); public void close(); public boolean checkError(); }
上面的代码显示了 PrintWriter
提供的关键方法。 这些方法允许各种数据类型的格式化输出。 该类支持自动刷新和通过 checkError() 进行错误检查。
创建 PrintWriter
可以使用各种输出目标创建 PrintWriter,包括文件、输出流和其他 writer。 您可以指定自动刷新行为。 构造函数会为文本输出适当地处理字符编码。
import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.PrintWriter; public class Main { public static void main(String[] args) { try { // Create with file name PrintWriter writer1 = new PrintWriter("output1.txt"); // Create with File object PrintWriter writer2 = new PrintWriter(new File("output2.txt")); // Create with OutputStream PrintWriter writer3 = new PrintWriter( new FileOutputStream("output3.txt")); // Create with auto-flush PrintWriter writer4 = new PrintWriter( new FileOutputStream("output4.txt"), true); System.out.println("Four PrintWriters created successfully"); writer1.close(); writer2.close(); writer3.close(); writer4.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } } }
此示例演示了创建 PrintWriter 实例的不同方法。 前两个直接为文件创建 writer。 第三个包装一个 OutputStream。 第四个启用 println 调用时的自动刷新。 完成后始终关闭 writer。
使用 PrintWriter 写入文本
PrintWriter 为所有原始类型和对象提供 print 和 println 方法。 这些方法使用 toString
将值转换为字符串。 println 变体在输出后添加行终止符。
import java.io.PrintWriter; public class Main { public static void main(String[] args) { try (PrintWriter writer = new PrintWriter("output.txt")) { // Print various data types writer.print(true); writer.print(' '); writer.print(42); writer.print(' '); writer.print(3.14159); writer.println(); writer.println("This is a string"); writer.println(new Object()); System.out.println("Data written to file"); } catch (Exception e) { e.printStackTrace(); } } }
此示例显示了使用 PrintWriter 的基本打印操作。 print 方法写入数据,没有行终止符。 println 方法添加适当的行尾。 try-with-resources 确保正确的 writer 关闭。 所有值都转换为字符串。
使用 printf 进行格式化输出
PrintWriter 通过 printf 和 format 方法支持格式化输出。 这些方法使用类似于 C 的 printf 的格式字符串。 格式说明符控制值的转换和显示方式。
import java.io.PrintWriter; import java.util.Date; public class Main { public static void main(String[] args) { try (PrintWriter writer = new PrintWriter("formatted.txt")) { String name = "John Doe"; int age = 35; double salary = 45250.75; Date now = new Date(); writer.printf("Name: %s, Age: %d\n", name, age); writer.printf("Salary: %,.2f\n", salary); writer.printf("Current date/time: %tF %tT\n", now, now); writer.printf("Hex value: %x, Octal value: %o\n", 255, 255); System.out.println("Formatted data written to file"); } catch (Exception e) { e.printStackTrace(); } } }
此示例演示了使用 PrintWriter 的格式化输出。 %s、%d 和 %f 说明符处理字符串、整数和浮点数。 %tF 和 %tT 格式化日期。 数字格式包括千位分隔符和小数位数。 格式字符串可以包含文字文本和特殊字符。
使用 PrintWriter 进行错误处理
与大多数 I/O 类不同,PrintWriter
方法不会抛出 IOException
。 相反,错误在内部跟踪,可以使用 checkError
进行检查。 这使得代码更简洁,但需要显式的错误检查。
import java.io.PrintWriter; public class Main { public static void main(String[] args) { PrintWriter writer = new PrintWriter(System.out); // Write some data writer.println("First line"); writer.println(1 / 0); // ArithmeticException but not caught // Check for errors if (writer.checkError()) { System.out.println("An error occurred during writing"); } writer.close(); } }
此示例显示了 PrintWriter 的错误处理方法。 除以零通常会抛出异常,但 PrintWriter 会抑制它。 必须调用 checkError 方法来检测问题。 此行为与大多数 Java I/O 类不同。
自动刷新行为
PrintWriter 可以配置为在调用 println 时自动刷新。 这确保输出在行尾之后立即写入。 常规 print 调用不会触发自动刷新。
import java.io.PrintWriter; public class Main { public static void main(String[] args) { // Without auto-flush PrintWriter writer1 = new PrintWriter(System.out); writer1.print("This won't appear immediately"); // Need manual flush writer1.flush(); // With auto-flush PrintWriter writer2 = new PrintWriter(System.out, true); writer2.println("This appears immediately due to auto-flush"); writer1.close(); writer2.close(); } }
此示例比较了自动刷新和手动刷新行为。 第一个 writer 需要显式的 flush 调用。 第二个 writer 在 println 上自动刷新。 自动刷新对于需要立即显示的交互式输出很有用。 手动刷新提供对 I/O 操作的更多控制。
写入多个目标
PrintWriter 可以写入各种输出目标,包括系统流、文件和网络连接。 相同的打印方法在所有目标上一致地工作。 这提供了灵活的输出能力。
import java.io.ByteArrayOutputStream; import java.io.PrintWriter; import java.io.StringWriter; public class Main { public static void main(String[] args) { // Write to standard output PrintWriter consoleWriter = new PrintWriter(System.out); consoleWriter.println("Writing to console"); consoleWriter.flush(); // Write to string buffer StringWriter stringWriter = new StringWriter(); PrintWriter stringPrinter = new PrintWriter(stringWriter); stringPrinter.println("Writing to string buffer"); stringPrinter.close(); System.out.println("String content: " + stringWriter.toString()); // Write to byte array ByteArrayOutputStream byteStream = new ByteArrayOutputStream(); PrintWriter byteWriter = new PrintWriter(byteStream); byteWriter.println("Writing to byte array"); byteWriter.close(); System.out.println("Byte content: " + byteStream.toString()); consoleWriter.close(); } }
此示例演示了具有不同输出目标的 PrintWriter。 第一个写入标准输出。 第二个捕获字符串中的输出。 第三个写入字节数组。 所有都使用相同的打印方法。 这显示了 PrintWriter 在各种输出类型中的多功能性。
来源
在本文中,我们介绍了 Java PrintWriter 类的基本方法和功能。 了解这些概念对于在 Java 应用程序中使用格式化文本输出至关重要。
作者
列出所有Java教程。