当前位置: 首页 > news >正文

Java学习之——“IO流“的进阶流之打印流的学习

       打印流是Java IO包中非常实用的高级流,主要包括PrintStreamPrintWriter两个类。它们提供了丰富的方法来输出各种数据类型,并且具有自动刷新、异常处理等特性。

1.打印流的特点

  • 不会抛出IOException:打印流捕获所有IO异常,通过checkError()方法检查错误状态
  • 自动刷新功能:可配置自动刷新模式,调用println()printf()format()后自动刷新缓冲区
  • 丰富的输出方法:提供了多种print()println()方法重载,支持各种数据类型
  • 格式化输出:支持类似C语言的printf风格格式化输出
  • 字符编码支持:可以指定字符编码(特别是PrintWriter)

2.PrintStream与PrintWriter的区别

特性PrintStreamPrintWriter
处理类型字节流字符流
字符编码使用平台默认编码,可指定可指定字符编码
自动刷新仅当调用println()时可配置自动刷新模式
异常处理通过checkError()检查通过checkError()检查

3.打印流常用方法详解

(1). 输出方法

  • print(数据类型):输出各种数据类型
  • println(数据类型):输出各种数据类型并换行
  • println():输出空行

(2).格式化方法

  • printf(String format, Object... args):格式化输出
  • format(String format, Object... args):同上,与printf功能相同

(3). 其他方法

  • flush():刷新流
  • close():关闭流
  • checkError():检查错误状态

4.格式化符号说明

符号说明示例
%d十进制整数123
%x十六进制整数7b
%o八进制整数173
%f浮点数3.14
%e科学计数法3.14e+00
%s字符串"hello"
%c字符'A'
%b布尔值true
%t日期时间12:30:45
%n换行符

5.核心代码示例

import java.io.*;
import java.util.Date;public class PrintStreamDetailedDemo {public static void main(String[] args) {// 1. 基本PrintStream使用basicPrintStreamUsage();// 2. 基本PrintWriter使用basicPrintWriterUsage();// 3. 格式化输出示例formattedOutput();// 4. 重定向系统输出redirectSystemOutput();// 5. 异常处理示例exceptionHandling();}// 基本PrintStream使用private static void basicPrintStreamUsage() {try (PrintStream ps = new PrintStream("printstream_output.txt")) {ps.println("=== PrintStream基本使用 ===");ps.print("整数: ");ps.println(100);ps.print("浮点数: ");ps.println(3.14159);ps.print("布尔值: ");ps.println(true);ps.print("字符: ");ps.println('A');ps.print("对象: ");ps.println(new Date());} catch (FileNotFoundException e) {System.err.println("文件未找到: " + e.getMessage());}}// 基本PrintWriter使用private static void basicPrintWriterUsage() {try (PrintWriter pw = new PrintWriter("printwriter_output.txt")) {pw.println("=== PrintWriter基本使用 ===");pw.print("整数: ");pw.println(200);pw.print("浮点数: ");pw.println(2.71828);pw.print("布尔值: ");pw.println(false);pw.print("字符: ");pw.println('B');pw.print("对象: ");pw.println(new Date());} catch (FileNotFoundException e) {System.err.println("文件未找到: " + e.getMessage());}}// 格式化输出示例private static void formattedOutput() {try (PrintWriter pw = new PrintWriter("formatted_output.txt")) {pw.println("=== 格式化输出示例 ===");// 使用printf进行格式化输出pw.printf("整数: %d, 十六进制: %x, 八进制: %o%n", 255, 255, 255);pw.printf("浮点数: %.2f, 科学计数法: %.2e%n", 3.14159, 314159.0);pw.printf("字符串: %s, 字符: %c%n", "Hello", 'A');pw.printf("布尔值: %b%n", true);pw.printf("当前时间: %tT, 日期: %tF%n", new Date(), new Date());pw.printf("宽度和对齐: |%10d|, |%-10d|%n", 123, 123);pw.printf("前导零: %05d%n", 42);// 使用format方法(与printf相同)pw.format("格式化的金额: $%,.2f%n", 1234567.89);} catch (FileNotFoundException e) {System.err.println("文件未找到: " + e.getMessage());}}// 重定向系统输出private static void redirectSystemOutput() {try {// 保存原始System.outPrintStream originalOut = System.out;// 重定向到文件PrintStream fileOut = new PrintStream("system_output.txt");System.setOut(fileOut);System.out.println("=== 系统输出重定向示例 ===");System.out.println("这行文字将输出到文件而不是控制台");System.out.printf("当前时间: %tT%n", new Date());// 执行一些计算并输出for (int i = 1; i <= 5; i++) {System.out.printf("%d的平方: %d%n", i, i * i);}// 恢复原始System.outSystem.setOut(originalOut);fileOut.close();System.out.println("系统输出已恢复,这行文字显示在控制台");} catch (FileNotFoundException e) {System.err.println("文件未找到: " + e.getMessage());}}// 异常处理示例private static void exceptionHandling() {try (PrintStream ps = new PrintStream("exception_test.txt")) {// 正常输出ps.println("正常输出测试");// 模拟错误 - 关闭底层流后尝试输出ps.close();ps.println("这行不会输出,因为流已关闭");} catch (FileNotFoundException e) {System.err.println("文件未找到: " + e.getMessage());}// 使用checkError检查错误状态PrintStream ps = new PrintStream(new OutputStream() {@Overridepublic void write(int b) throws IOException {throw new IOException("模拟写入错误");}});ps.print("测试错误");if (ps.checkError()) {System.out.println("检测到打印流错误");}ps.close();}
}

        打印流是Java IO系统中非常实用的高级流,提供了丰富的输出功能和便捷的异常处理机制。通过掌握PrintStream和PrintWriter的使用,可以大大提高输出处理的效率和代码的可读性。特别是在需要格式化输出或重定向系统输出的场景中,打印流表现出色。


文章转载自:

http://3bWtIlqA.bztzm.cn
http://4r5O9QqS.bztzm.cn
http://Sq0StqOU.bztzm.cn
http://MrQu5Jam.bztzm.cn
http://oqjwHYPO.bztzm.cn
http://wD97Px7I.bztzm.cn
http://D2RPQqdx.bztzm.cn
http://rJF4fXI0.bztzm.cn
http://NzfHdGGF.bztzm.cn
http://mg8BQc6q.bztzm.cn
http://9LGCVdhk.bztzm.cn
http://KHQUlC0u.bztzm.cn
http://PoNUfODI.bztzm.cn
http://FapCTlP6.bztzm.cn
http://FSEMrBk5.bztzm.cn
http://Aj7Jm3ro.bztzm.cn
http://XOK0hlGD.bztzm.cn
http://u3egg0IL.bztzm.cn
http://F0zzZvsY.bztzm.cn
http://XOZLCf8g.bztzm.cn
http://2bGZMEU8.bztzm.cn
http://CbCyBpdj.bztzm.cn
http://24AdZ9JT.bztzm.cn
http://sJEWnNXM.bztzm.cn
http://fSvnPwpD.bztzm.cn
http://T4tXgNIo.bztzm.cn
http://8bbIkWj5.bztzm.cn
http://XAkZKFCR.bztzm.cn
http://t4mNFA67.bztzm.cn
http://QEfbpkz3.bztzm.cn
http://www.dtcms.com/a/380083.html

相关文章:

  • Vue 进阶实战:从待办清单到完整应用(路由 / 状态管理 / 性能优化全攻略)
  • 《用 Python 和 TensorFlow 构建你的第一个神经网络:从零开始识别手写数字》
  • 深入探索Vue.js:响应式原理与性能优化
  • 58.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--新增功能--图形验证码
  • 【Linux】基本指令 · 下
  • springboot+python+uniapp基于微信小程序的旅游服务系统景点信息展示 路线推荐 在线预约 评论互动系统
  • WebApp 的价值与实现:从浏览器架构到用户体验优化
  • 用户体验五大要点:从问题到解决方案的完整指南
  • 从ChatGPT家长控制功能看AI合规与技术应对策略
  • DeepSeek-VL 解析:混合视觉-语言模型如何超越传统计算机视觉方法
  • 从15kHz 到20MHz:为什么LTE带宽不能被子载波间隔整除?
  • Android SystemServer 系列专题【篇五:UserController用户状态控制】
  • Nature | 本周最新文献速递
  • Vuetify:构建优雅Vue应用的Material Design组件库
  • 6种A2A(智能体到智能体)的协议方案
  • 性能测试工具jmeter使用
  • [Windows] PDF 专业压缩工具 v3.0
  • kubectl常用命令
  • MinIO 分布式模式与纠删码
  • linux 宏 DEVICE_ATTR
  • 代码随想录刷题Day56
  • Ansible的 Playbook 模式详解
  • Qt 调用setLayout后,父对象自动设置
  • 现在中国香港服务器速度怎么样?
  • 用python的socket写一个局域网传输文件的程序
  • CentOS配置vsftpd服务器
  • 华为初级认证培训需要吗?HCIA考试考什么内容?自学还是报班?
  • 系统核心解析:深入操作系统内部机制——进程管理与控制指南(二)【进程状态】
  • KafKa02:Kafka配置文件server.properties介绍
  • 【LeetCode 每日一题】3459. 最长 V 形对角线段的长度