Java I/O 打印流详解:PrintStream 与 PrintWriter 用法及区别

陈默
陈默
发布时间:2026-10-15 | 3人浏览过
原创

打印流是 Java I/O 中用于简化数据写入的工具,主要包含 PrintStream 和 PrintWriter 两个类。它们支持自动转换各种数据类型并高效写入目标介质,广泛应用于文件日志记录及输出重定向场景。

打印流基本使用

第 1 步:初始化 PrintStream

目的:创建基于字节流的打印通道,将数据输出到文件或 OutputStream 中。

参数入口:PrintStream 提供三种常见构造方式:

  • PrintStream(OutputStream os):直接指向字节输出流管道(如 FileOutputStream)。
  • PrintStream(File f):直接指向 File 对象。
  • PrintStream(String filepath):直接指向文件路径字符串。
public static void main(String[] args) throws Exception {
    // 方式一: 打印流通向字节输出流管道
    PrintStream ps1 = new PrintStream(new FileOutputStream("test.txt"));

    // 方式二: 打印流通向文件对象
    PrintStream ps2 = new PrintStream(new File("test.txt"));

    // 方式三: 打印流通向文件路径
    PrintStream ps3 = new PrintStream("test.txt");
}

第 2 步:写入数据至文件

动作说明:调用 print()(不换行)或 println()(换行)方法写入任意类型数据。打印流会自动处理基本类型的格式转换。

public static void main(String[] args) throws Exception {
    PrintStream ps = new PrintStream(new FileOutputStream("test.txt"));

    ps.println(97);     // 整数 97
    ps.println("aaa");  // 字符串 aaa
    ps.println(123);
    ps.println('我');   // 字符 '我'
    ps.println(true);   // 布尔值 true

    // 必须关闭流以释放资源
    ps.close();
}

执行上述代码后,目标文件中将获得对应的格式化文本内容:

第 3 步:初始化 PrintWriter

目的:创建基于字符流的打印通道。

构造器选项:

  • PrintWriter(OutputStream os):底层仍为字节流,内部会进行字符编码转换。
  • PrintWriter(Writer w):直接指向字符输出流管道(推荐,减少转换开销)。
  • PrintWriter(File f):指向 File 对象。
  • PrintWriter(String filepath):指向文件路径。

第 4 步:PrintStream 与 PrintWriter 的核心区别

尽管两者在“打印什么就是什么”的高级功能上表现一致,但底层机制不同:

  1. 继承关系与数据类型:
    - PrintStream 继承自 OutputStream(字节输出流),适用于二进制/字节数据。
    - PrintWriter 继承自 Writer(字符输出流),专为文本/字符数据处理设计。
  2. 特有方法差异:
    - PrintStream 提供 write(byte[]) 方法直接写入字节数组。
    - PrintWriter 提供 write(String) 或 write(char[]) 方法直接写入字符。

注意:在实际开发中,如果需要纯粹的高性能字节写入,应直接使用 FileOutputStream;如果使用打印流,通常仅为了获取其便捷的 println 格式化功能。

覆盖模式与追加模式

默认情况下,无论是 PrintStream 还是 PrintWriter,打开文件时都会**覆盖**原有内容。若需保留旧数据并进行追加,必须在底层的 FileOutputStream 中开启追加参数:true。

public static void main(String[] args) throws Exception {
    // 设置 FileOutputStream 第二个参数为 true 表示追加模式
    PrintWriter pw = new PrintWriter(new FileOutputStream("test.txt", true));
    
    pw.println("This line is appended.");
    pw.close();
}

输出语句重定向

应用场景:在开发阶段使用控制台调试,部署到生产环境时,希望将所有系统标准输出重定向到日志文件中,避免控制台滚动干扰。

操作逻辑:利用 System.out 实际上是 PrintStream 的特性,通过 System.setOut() 将其替换为新的文件流。

public static void main(String[] args) throws Exception {
    // 创建指向文件的 PrintStream
    PrintStream ps = new PrintStream("test.txt");

    // 改变标准输出位置 (重定向)
    System.setOut(ps);

    // 以下所有 System.out 的调用都将写入文件
    System.out.println("aaa");
    System.out.println(97);
    System.out.println(123);
    System.out.println('重定向测试');
}

总结

打印流 PrintStream 和 PrintWriter 极大地简化了 Java I/O 中多类型数据的写入过程。掌握两者的构造差异、文件覆盖/追加机制,以及通过 System.setOut() 实现输出重定向的技巧,能够显著提升日志处理与程序调试的效率。以上就是 Java I/O 流之打印流详细使用方法教程的详细内容,更多关于 Java I/O 流的操作技巧资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表