IO流——打印流

一、打印流

1.1 什么是打印流?

打印流 是 Java 提供的一类高级输出流,用于以方便、灵活的方式输出格式化数据 。它们屏蔽了底层字节/字符转换的复杂性,直接支持 print()、println()、printf() 等直观方法。

Java 中有两个核心打印流类:

类名 继承关系 输出单位 特点
PrintStream FilterOutputStream → OutputStream 字节流 常用于 System.out,不抛出 IOException
PrintWriter Writer 字符流 支持自动刷新、更适用于文本输出

打印流不能读,只能写,只有输出流。

一句话理解:

  • PrintStream = 字节版打印流(如 System.out)
  • PrintWriter = 字符版打印流(推荐用于文件文本输出

1.2 字节打印流

1. 核心特性

  • 属于字节输出流体系
  • 不会抛出 IOException(内部捕获并设置错误标志)
  • 自动刷新(可选)
  • 支持格式化输出(printf / format)
java 复制代码
        // 1、创建字节打印流的对象
        PrintStream ps = new PrintStream(new FileOutputStream("lkb04-File&IOCode\\a.txt"), true, Charset.forName("GBK"));
        // 2、写出数据
        ps.println(97);
        ps.print(97);
        ps.println();
        ps.printf("%.2f", 9.5);
        // 3、释放资源
        ps.close();

1.3 字符打印流

1. 核心优势

  • 属于字符输出流体系
  • 支持指定字符编码 (通过包装 OutputStreamWriter)
  • 可配置自动刷新(autoFlush)
  • 更适合处理国际化文本
java 复制代码
        // 1、创建字符打印流的对象
        PrintWriter pw = new PrintWriter(new FileWriter("D:\\a.txt"), true);
        // 2、写出数据
        pw.println("hello world");
        pw.print("hello world");
        pw.printf("%.2f", 9.5);
        // 3、关闭资源
        pw.close();

1.4 PrintStream vs PrintWriter:关键对比

特性 PrintStream PrintWriter
流类型 字节流 (OutputStream) 字符流 (Writer)
异常处理 不抛出 IOException(静默失败) 可能抛出 IOException(更安全)
字符编码 使用平台默认编码(易乱码) 可显式指定编码(推荐 UTF-8)
自动刷新 构造时可设 autoFlush=true 构造时可设 autoFlush=true
典型用途 System.out、简单控制台输出 文件日志、文本报告、国际化应用
文本安全性 ❌ 不适合多语言文本 ✅ 适合多语言文本

✅ 结论:

  • 控制台输出:用 PrintStream(如 System.out)
  • 文件文本输出:优先选择 PrintWriter + 显式 UTF-8 编码

1.5 打印流的核心优势

1. 自动类型转换

无需手动调用 String.valueOf(),直接输出任意对象:

java 复制代码
pw.println(123);        // int
pw.println(true);       // boolean
pw.println(new Date()); // Object(调用 toString())

2. 强大的格式化能力

通过 printf() 或 format() 实现 C 风格格式化:

java 复制代码
pw.printf("商品:%s,价格:¥%,.2f,库存:%d%n", "笔记本电脑", 5999.99, 100);
// 输出:商品:笔记本电脑,价格:¥5,999.99,库存:100

占位符全览:

原文链接:https://blog.csdn.net/2401_84643729/article/details/155781312

3. 简化代码

相比原始 Writer 或 OutputStream,代码更简洁:

java 复制代码
// 传统方式
writer.write("Total: ");
writer.write(String.valueOf(total));
writer.write("\n");

// 打印流方式
pw.println("Total: " + total);

Java 的打印流系统通过 PrintStream 和 PrintWriter 为开发者提供了高效、简洁、格式化的输出能力:

  • PrintStream :适合控制台、简单字节输出,代表就是 System.out
  • PrintWriter :适合文本文件、国际化应用,强烈推荐用于文件写入

🌟 终极建议 :

写文件?用 PrintWriter + OutputStreamWriter + StandardCharsets.UTF_8!

写控制台?放心用 System.out(它就是 PrintStream)!

相关推荐
Chrischaan9 分钟前
做 AI 塔罗小程序时,我为什么不让大模型自己抽牌:一次上线复盘
前端
Peregrine911 分钟前
C++ - > 类和对象
java·c++·算法
余醉 | dtminer15 分钟前
56%的保护效应藏在乳腺密度里:Nat Commun 高分中介孟德尔随机化全 R 管线拆解(附核心图)
开发语言·r语言·孟德尔随机化
2501_9339232517 分钟前
SpringCloud组件:Eureka服务注册与发现
java·开发语言·后端·spring cloud·eureka
Wang's Blog19 分钟前
Java 中间件之 RabbitMQ 快速入门: SpringAMQP 消息转换器
java·中间件·java-rabbitmq
染指111036 分钟前
142.Agent-多Agent框架-通过Skills实现多Agent
开发语言·人工智能·python·langchain·agents
骑着蜗牛撵大象32738 分钟前
LangChain 工具调用从声明到闭环:给智能体接上真实的手脚
前端
Re_zero1 小时前
一次 SSE 断流排查:PrintWriter 吞掉了我的 IOException
java·后端
数据掘金1 小时前
百度统计后台页面数据异常?从手动调用时机开始排查
前端
hunteritself1 小时前
10 层 4K 实时剪辑,国产工作站进入广电制作核心
大数据·前端·人工智能·深度学习·transformer