Java PrintStream 类
最后修改时间:2025 年 4 月 16 日
java.io.PrintStream
类为其他输出流添加了功能。 它提供了方便地打印各种数据值的方法。 与其他输出流不同,它永远不会抛出 IOException。
当写入换行符时,PrintStream
会自动刷新其缓冲区。 它会自动处理字符编码转换。 此类通常通过 System.out
用于标准输出。
PrintStream 类概述
PrintStream
扩展了 FilterOutputStream
并提供了格式化的输出功能。 关键方法包括各种 print 和 println 方法、format/printf 方法和错误检查。 所有方法都处理字符转换。
public class PrintStream extends FilterOutputStream implements Appendable, Closeable { public PrintStream(OutputStream out); public PrintStream(OutputStream out, boolean autoFlush); public PrintStream(OutputStream out, boolean autoFlush, String encoding); public PrintStream(String fileName); public PrintStream(File file); 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 PrintStream printf(String format, Object... args); public PrintStream format(String format, Object... args); public void write(int b); public void write(byte[] buf, int off, int len); public boolean checkError(); public void close(); }
上面的代码显示了 PrintStream
提供的关键方法。 这些方法允许方便地输出各种数据类型。 该类实现了 Appendable
用于字符串连接操作。
创建 PrintStream
可以从 OutputStream、文件路径或 File 对象创建 PrintStream。 您可以指定自动刷新行为和字符编码。 auto-flush 参数确定流是否在换行时刷新。
import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.PrintStream; public class Main { public static void main(String[] args) { try { // Create from OutputStream with auto-flush PrintStream ps1 = new PrintStream( new FileOutputStream("output1.txt"), true); // Create from file path with specified encoding PrintStream ps2 = new PrintStream("output2.txt", "UTF-8"); // Create from File object PrintStream ps3 = new PrintStream(new File("output3.txt")); System.out.println("Three PrintStreams created successfully"); ps1.close(); ps2.close(); ps3.close(); } catch (IOException e) { e.printStackTrace(); } } }
此示例演示了创建 PrintStream 的不同方法。 第一个使用启用了自动刷新的 OutputStream。 第二个指定 UTF-8 编码。 第三个是从 File 对象创建的。 完成后始终关闭流。
基本 Print 和 Println 方法
PrintStream 为所有原始类型和对象提供 print 和 println 方法。 println 变体在打印后添加换行符。 这些方法永远不会抛出 IOExceptions,而是设置一个内部错误标志。
import java.io.PrintStream; public class Main { public static void main(String[] args) { try (PrintStream ps = new PrintStream("output.txt")) { // Print various data types ps.print(true); ps.print(' '); ps.print(123); ps.print(' '); ps.print(3.14159); ps.println(); // Println variants ps.println("This is a string"); ps.println(new Object()); System.out.println("Data written to output.txt"); } catch (Exception e) { e.printStackTrace(); } } }
此示例显示了基本的 print 和 println 用法。 第一行打印多个值,没有换行符。 println 方法添加自动行终止符。 try-with-resources 确保正确的流关闭。
使用 printf 格式化输出
printf 方法提供 C 风格的格式化输出。 它使用带有说明符的格式字符串来控制输出。 这与 format 方法相同。 该方法返回 PrintStream 以进行方法链接。
import java.io.PrintStream; import java.util.Date; public class Main { public static void main(String[] args) { try (PrintStream ps = new PrintStream("formatted.txt")) { // Basic formatting ps.printf("Integer: %d, Float: %.2f%n", 42, 3.14159); // Date formatting ps.printf("Current date: %tF %n", new Date()); // Method chaining ps.printf("Name: %s %n", "John") .printf("Age: %d %n", 30); // Width and alignment ps.printf("|%-10s|%10s|%n", "Left", "Right"); System.out.println("Formatted output written"); } catch (Exception e) { e.printStackTrace(); } } }
此示例演示了 printf 格式化功能。 它显示了数字格式化、日期格式化、方法链接和文本对齐。 %n 说明符是平台独立的换行符。 格式字符串遵循与 String.format() 相同的规则。
使用 checkError 处理错误
PrintStream 不会抛出 IOExceptions。 而是设置一个内部错误标志。 checkError 方法返回此标志的状态。 设置后,该标志将保持设置状态,直到流关闭。
import java.io.PrintStream; public class Main { public static void main(String[] args) { // Create PrintStream that will fail on write PrintStream ps = new PrintStream(new java.io.OutputStream() { @Override public void write(int b) { // Simulate write failure throw new RuntimeException("Write failed"); } }); // Attempt to write ps.println("This will fail"); // Check error status if (ps.checkError()) { System.out.println("Error occurred during writing"); } // The error persists System.out.println("Error still set? " + ps.checkError()); ps.close(); } }
此示例模拟了写入失败的情况。 自定义的 OutputStream 总是抛出一个异常。 在写入失败后,checkError 返回 true。 错误状态会持续存在,直到流关闭。 这演示了 PrintStream 的错误处理方法。
重定向 System.out
PrintStream 通常用于重定向标准输出。 System.setOut 方法接受 PrintStream。 这允许将控制台输出捕获到文件或其他目标。
import java.io.PrintStream; import java.io.File; public class Main { public static void main(String[] args) { try { // Save original System.out PrintStream originalOut = System.out; // Redirect to file PrintStream fileOut = new PrintStream(new File("console.log")); System.setOut(fileOut); // These will go to file System.out.println("This goes to console.log"); System.out.printf("Formatted: %d %n", 42); // Restore original System.out System.setOut(originalOut); System.out.println("Back to console output"); fileOut.close(); } catch (Exception e) { e.printStackTrace(); } } }
此示例显示了如何将 System.out 重定向到文件。 原始 PrintStream 被保存以进行恢复。 然后,所有 System.out 调用都写入该文件。 最后,恢复原始输出。 此技术对于日志记录很有用。
追加到文件
虽然 PrintStream 不直接支持追加,但您可以通过在追加模式下包装 FileOutputStream 来实现此目的。 这允许添加到现有文件,而无需覆盖。
import java.io.FileOutputStream; import java.io.PrintStream; import java.io.IOException; public class Main { public static void main(String[] args) { try (FileOutputStream fos = new FileOutputStream("log.txt", true); PrintStream ps = new PrintStream(fos)) { ps.println("New log entry at " + System.currentTimeMillis()); System.out.println("Appended to log.txt"); } catch (IOException e) { e.printStackTrace(); } } }
此示例演示了追加到文件。 使用启用的追加模式创建 FileOutputStream。 然后,PrintStream 写入此流。 每次运行都会添加新行,而不会覆盖现有内容。 时间戳确保唯一的条目。
来源
在本文中,我们介绍了 Java PrintStream 类的基本方法和特性。 了解这些概念对于在 Java 应用程序中使用格式化输出至关重要。
作者
列出所有Java教程。