Java 打印流:PrintStream 与 PrintWriter 详解

在 Java 编程中,System.out.println() 的使用频率恐怕不亚于 main 方法的使用频率。其中,System.out 返回的正是打印流 PrintStream。除此之外,Java 还提供了另一个打印流 PrintWriter,它们分别继承自 OutputStreamWriter,一个是字节流,一个是字符流。

1 打印流的特点

打印流具有以下几个特点:

  • 自动数据类型转换:打印流可以将各种数据类型转换为字符串,并输出到指定的输出流中。
  • 自动换行:打印流可以在输出字符串的末尾自动添加换行符,方便输出多个字符串时的格式控制。
  • 输出到控制台或文件:打印流可以将数据输出到控制台或者文件中,方便调试和日志记录(尽管生产环境下更推荐使用 Logback、ELK 等)。

2. PrintStream 类常用方法

PrintStream 类提供了以下常用方法:

  • print():输出一个对象的字符串表示形式。
  • println():输出一个对象的字符串表示形式,并在末尾添加一个换行符。
  • printf():使用指定的格式字符串和参数输出格式化的字符串。

2.1 示例

PrintStream ps = System.out;
ps.println("沉默王二");
ps.print("沉 ");
ps.print("默 ");
ps.print("王 ");
ps.print("二 ");
ps.println();ps.printf("姓名:%s,年龄:%d,成绩:%f", "沉默王二", 18, 99.9);

在这个示例中,我们创建了一个 PrintStream 对象 ps,它输出到控制台。我们使用 psprintprintln 方法输出了一些字符串。使用 printf 方法输出了一个格式化字符串,其中 %s%d%f 分别表示字符串、整数和浮点数的格式化输出。

3 printf 方法详解

printf 方法的签名如下:

public PrintStream printf(String format, Object... args);

其中,format 参数是格式化字符串,args 参数是要输出的参数列表。格式化字符串包含了普通字符和转换说明符。普通字符是指除了转换说明符之外的字符,它们在输出时直接输出。转换说明符是由百分号(%)和一个或多个字符组成的,用于指定输出的格式和数据类型。

3.1 常用转换说明符

  • %s:输出一个字符串。
  • %d%i:输出一个十进制整数。
  • %x%X:输出一个十六进制整数,%x 输出小写字母,%X 输出大写字母。
  • %f%F:输出一个浮点数。
  • %e%E:输出一个科学计数法表示的浮点数,%e 输出小写字母 e%E 输出大写字母 E
  • %g%G:输出一个浮点数,自动选择 %f%e/%E 格式输出。
  • %c:输出一个字符。
  • %b:输出一个布尔值。
  • %h:输出一个哈希码(16进制)。
  • %n:换行符。

3.2 修饰符

除了转换说明符之外,printf 方法还支持一些修饰符,用于指定输出的宽度、精度、对齐方式等。

  • 宽度修饰符:用数字指定输出的最小宽度,如果输出的数据不足指定宽度,则在左侧或右侧填充空格或零。
  • 精度修饰符:用点号(.)和数字指定浮点数或字符串的精度,对于浮点数,指定小数点后的位数,对于字符串,指定输出的字符数。
  • 对齐修饰符:用减号(-)或零号(0)指定输出的对齐方式,减号表示左对齐,零号表示右对齐并填充零。

3.3 示例

int num = 123;
System.out.printf("%5d\n", num); // 输出 "  123"
System.out.printf("%-5d\n", num); // 输出 "123  "
System.out.printf("%05d\n", num); // 输出 "00123"double pi = Math.PI;
System.out.printf("%10.2f\n", pi); // 输出 "      3.14"
System.out.printf("%-10.4f\n", pi); // 输出 "3.1416    "String name = "沉默王二";
System.out.printf("%10s\n", name); // 输出 "     沉默王二"
System.out.printf("%-10s\n", name); // 输出 "沉默王二     "

具体来说,

  • 使用 %5d 来指定输出的整数占据 5 个字符的宽度,不足部分在左侧填充空格。
  • 使用 %-5d 来指定输出的整数占据 5 个字符的宽度,不足部分在右侧填充空格。
  • 使用 %05d 来指定输出的整数占据 5 个字符的宽度,不足部分在左侧填充 0。
  • 使用 %10.2f 来指定输出的浮点数占据 10 个字符的宽度,保留 2 位小数,不足部分在左侧填充空格。
  • 使用 %-10.4f 来指定输出的浮点数占据 10 个字符的宽度,保留 4 位小数,不足部分在右侧填充空格。
  • 使用 %10s 来指定输出的字符串占据 10 个字符的宽度,不足部分在左侧填充空格。
  • 使用 %-10s 来指定输出的字符串占据 10 个字符的宽度,不足部分在右侧填充空格。

4 PrintWriter

PrintWriterWriter 的子类,用于处理字符流。它提供了与 PrintStream 类似的方法,但更适合处理字符数据。

4.1 示例

PrintWriter writer = new PrintWriter(new FileWriter("output.txt"));
writer.println("沉默王二");
writer.printf("他的年纪为 %d.\n", 18);
writer.close();

在这个示例中,我们创建了一个 PrintWriter 对象,它的构造函数接收一个 Writer 对象作为参数。我们使用 FileWriter 来创建一个输出文件流,并将其作为参数传递给 PrintWriter 的构造函数。然后,我们使用 PrintWriterprintlnprintf 方法来输出两行内容。最后,我们调用 PrintWriterclose 方法来关闭输出流。

我们也可以不创建 FileWriter 对象,直接指定文件名:

PrintWriter pw = new PrintWriter("output.txt");
pw.println("沉默王二");
pw.printf("他的年纪为 %d.\n", 18);
pw.close();

5 小结

打印流在 Java 编程中非常常用,尤其是在调试和日志记录中。PrintStreamPrintWriter 提供了方便的方法来输出各种数据类型,并且支持格式化输出。尽管 printf 方法的规则较多,但在实际使用中,我们可以根据需要查阅文档或使用说明,不必死记硬背。通过合理使用打印流,我们可以更高效地进行调试和日志记录。

6 思维导图

在这里插入图片描述

7 参考链接

Java 打印流:PrintStream 和 PrintWriter

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/2876.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

RESTful风格

目录 一、什么是RESTful 1.1 RESTFul对WEB服务接口的规定包括: 1.2 REST对请求方式的具体约束如下: 1.3 REST对URL的具体约束如下: 1.4 RESTFul的核心概念: 二、RESTful风格与传统方式对比 三、RESTful风格演示 3.1 查询所…

运维工具之docker入门

1.容器与docker 1.什么是容器? 容器是一种轻量级的,可移植的软件运行环境。它将软件程序本身及软件依赖库打包在一起。可以在不同平台和系统上运行。 2.什么是LXC LXC就是Linux container,。LXC是一种虚拟化技术,可以在操作系统层级上为应…

Ubuntu系统安装NVIDIA驱动、CUDA、PyTorch等GPU深度学习环境

学习目标: 在Ubuntu系统上安装CUDA、PyTorch等GPU深度学习环境,主要目标是为深入研究深度学习和深度强化学习提供高效的计算支持。通过构建GPU环境,计划掌握深度学习的基本概念和算法应用,提高模型训练效率,特别是在复…

地理信息科学专业想搞GIS开发:学前端还是后端?

地理信息科学专业的同学是学前端开发比较好呢还是学后端开发比较好呢? 部分网友:学前端更好 主修前端更好,因为地信学后端,是卷不赢学计算机的 本科卷前端,硕士阶段可以卷后端 甚至有网友直呼,地信根本没有…

软件测试学习笔记丨Flask框架-请求与响应

本文转自测试人社区,原文链接:https://ceshiren.com/t/topic/23408 请求方法 from flask import Flaskapp Flask(__name__)app.route("/cases", methods["get"]) def get_case():return {"code": 0, "msg": &…

你敢想象吗?我能远程控制家里的电脑进入Bios

老家的爸妈用电脑也不知怎的,偶尔就不行了。这个偶尔还挺频繁的,我自己又会修电脑,但奈何距离太远!如果叫别人上门修电脑,一次就是200…… 我的心在滴血啊在滴血~如果有这么一款产品,就算电脑无…

基于STM32的温湿度监测器教学

引言 随着科技的发展,温湿度监测在农业、仓储、环境监测等领域的应用越来越广泛。本文将指导您如何基于STM32开发一个简单的温湿度监测器,使用常用的DHT11或DHT22传感器进行数据采集,并将监测结果显示在LCD或OLED屏幕上。 项目名称 STM32温湿…

科研绘图系列:R语言组合堆积图(stacked plot)

文章目录 介绍加载R包数据数据预处理画图1画图2组合图形系统信息介绍 堆积图(Stacked Chart),也称为堆叠图,是一种常用的数据可视化图表,主要用于展示不同类别的数据量在总体中的分布情况。堆积图可以是柱状图、条形图或面积图的形式,其中各个类别的数据量被叠加在一起,…

红黑树的平衡之舞:数据结构中的优雅艺术

文章目录 前言🚀一、红黑树的介绍1.1 红黑树的概念1.2 红黑树的特点1.3 红黑树的性质 🚀二、红黑树结点的定义🚀三、红黑树的框架🚀四、旋转操作🚀五、红黑树的插入操作5.1 uncle结点存在且为红5.2 uncle结点不存在或者…

ONLYOFFICE 8.2版本产品评测——遥遥领先,助力自动化办公

ONLYOFFICE 产品测试体验报告总结 知孤云出岫-CSDN博客 目录 产品介绍——篇【1】 一.关于 ONLYOFFICE 桌面编辑器 二.关于 ONLYOFFICE 协作空间 三.关于 ONLYOFFICE 文档 四.关于 ONLYOFFICE的版本介绍 产品新功能——篇【2】 一.关于 ONLYOFFICE的新增功能介绍 二.ONL…

【Linux驱动开发】通过设备树节点来配置和调用GPIO(pinctrl节点和gpio-controller)

【Linux驱动开发】通过设备树节点来配置和调用GPIO(pinctrl节点和gpio-controller) 文章目录 设备树下pinctrl节点GPIO控制节点调用方法GPIO输入附录:嵌入式Linux驱动开发基本步骤开发环境驱动文件编译驱动安装驱动自动创建设备节点文件 驱动…

【Linux】安装 SQL Server 命令行工具 mssql-tools18(Ubuntu 22.04)

引言 mssql-tools18 是一个包含 Microsoft SQL Server 命令行工具的软件包。这些工具包括 sqlcmd 和 bcp。 sqlcmd 是一个允许你用命令行与 SQL Server 进行交互的工具。你可以用它来运行 SQL 脚本,执行数据库维护任务,以及进行其他数据库管理操作。 b…

库存管理内训课件|39页PPT

文件是一份关于库存管理的内训课件,内容涵盖了库存管理的定义、分类、作用、存在的问题、管控目标以及具体管控措施。以下是对课件内容的总结: 1. 定义及分类 库存:为满足未来需求而暂时闲置的有价值的资源,与物品是否处于运动状…

大零售时代下融合发展的新路径:定制开发技术的应用与思考

摘要:本文探讨在大零售背景下,传统零售边界模糊,融合成为趋势。分析大零售包含的跨行业跨业态融合等三个层面,重点阐述定制开发技术中的 21 链动模式、AI 智能名片和 S2B2C 商城小程序在推动大零售发展中的作用和意义,…

OceanBase 安装使用详细说明

OceanBase 安装使用详细说明 一、系统环境要求二、安装OceanBase环境方案一:在线下载并安装all-in-one安装包方案二:离线安装all-in-one安装包安装前的准备工作三、配置OceanBase集群编辑配置文件部署和启动集群连接到集群集群状态和管理四、创建业务租户和数据库创建用户并赋…

基于LabVIEW应用ARINC 429板卡实现数据通讯——(下篇)

五、基于LabVIEW实现数据通讯 基于LabVIEW实现429板卡的数据通讯是调用API 动态链接库文件来实现的。该文件中有许多的板卡操作函数,在调用板卡中必须按照一定的函数调用流程来操作板卡,否则极易出现板卡操作错误。 1、API函数的调用步骤 API函数的调…

Android Studio打包时不显示“Generate Signed APK”提示信息

Android Studio打包时,默认显示“Generate Signed APK”提示信息,如下图所示: 如果在打包时不显示“Generate Signed APK”提示信息,解决办法是: Android Studio菜单栏,“File->Settings->Appearan…

典型的列转行(sparkSQL)

数据 id,username,math,computer,english 1,huangbo,34,58,58 2,xuzheng,45,87,45 3,wangbaoqiang,76,34,89 编写 SQL,将其转换为下面这张表 id,username,course,score 1,huangbo,math,34 1,huangbo,computer,58 1,huangbo,english,58 2,xuzheng,math,45 2,xuzheng,…

42python数据分析numpy基础之trace计算对角线元素的和

python的numpy库的trace()函数,计算对角线元素的和。 用法 numpy.trace(a, offset0, axis10, axis21, dtypeNone, outNone)描述 numpy.trace(a),返回数组a的对角线元素的和。 入参 a:必选,数组,列表,元…

信息安全工程师(68)可信计算技术与应用

前言 可信计算技术是一种计算机安全体系结构,旨在提高计算机系统在面临各种攻击和威胁时的安全性和保密性。 一、可信计算技术的定义与原理 可信计算技术通过包括硬件加密、受限访问以及计算机系统本身的完整性验证等技术手段,确保计算机系统在各种攻击和…