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