Java I/O 打印流详解:PrintStream 与 PrintWriter 用法及区别
打印流是 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 的核心区别
尽管两者在“打印什么就是什么”的高级功能上表现一致,但底层机制不同:
- 继承关系与数据类型:
-PrintStream继承自OutputStream(字节输出流),适用于二进制/字节数据。
-PrintWriter继承自Writer(字符输出流),专为文本/字符数据处理设计。 - 特有方法差异:
-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 流的操作技巧资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













