1
1
---
2
- title : Java打印流 :PrintStream & PrintWriter
3
- shortTitle : Java打印流PrintStream
2
+ title : 打印流 :PrintStream & PrintWriter
3
+ shortTitle : 打印流
4
4
category :
5
5
- Java核心
6
6
tag :
@@ -9,87 +9,126 @@ description: Java程序员进阶之路,小白的零基础Java教程,Java打
9
9
head :
10
10
- - meta
11
11
- name : keywords
12
- content : Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java入门,教程,Java IO,打印流,PrintStream,PrintWriter
12
+ content : Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java入门,教程,Java IO,打印流,PrintStream,PrintWriter,java 打印流
13
+
13
14
---
14
15
15
- ## 何谓打印流
16
+ # 7.7 打印流
17
+
18
+ 在我的职业生涯中, ` System.out.println() ` 的使用频率恐怕不亚于 main 方法的使用频率。其中 ` System.out ` 返回的正是打印流 ` PrintStream ` 。
19
+
20
+ 除此之外,还有它还有一个孪生兄弟,PrintWriter。PrintStream 是 OutputStream 的子类,PrintWriter 是 Writer 的子类,也就是说,一个[ 字节流] ( https://tobebetterjavaer.com/io/stream.html ) ,一个是[ 字符流] ( https://tobebetterjavaer.com/io/reader-writer.html ) 。
21
+
22
+ 打印流具有以下几个特点:
23
+
24
+ * 可以自动进行数据类型转换:打印流可以将各种数据类型转换为字符串,并输出到指定的输出流中。
25
+ * 可以自动进行换行操作:打印流可以在输出字符串的末尾自动添加换行符,方便输出多个字符串时的格式控制。
26
+ * 可以输出到控制台或者文件中:打印流可以将数据输出到控制台或者文件中,方便调试和日志记录(尽管生产环境下更推荐使用 [ Logback] ( https://tobebetterjavaer.com/gongju/logback.html ) 、ELK 等)。
27
+
28
+ PrintStream 类的常用方法包括:
29
+
30
+ - ` print() ` :输出一个对象的字符串表示形式。
31
+ - ` println() ` :输出一个对象的字符串表示形式,并在末尾添加一个换行符。
32
+ - ` printf() ` :使用指定的格式字符串和参数输出格式化的字符串。
33
+
34
+ 来一个示例体验一下。
35
+
36
+ ``` java
37
+ PrintStream ps = System . out;
38
+ ps. println(" 沉默王二" );
39
+ ps. print(" 沉 " );
40
+ ps. print(" 默 " );
41
+ ps. print(" 王 " );
42
+ ps. print(" 二 " );
43
+ ps. println();
44
+
45
+ ps. printf(" 姓名:%s,年龄:%d,成绩:%f" , " 沉默王二" , 18 , 99.9 );
46
+ ```
47
+
48
+ 在这个示例中,我们创建了一个 PrintStream 对象 ps,它输出到控制台。我们使用 ps 的 print 和 println 方法输出了一些字符串。
49
+
50
+ 使用 printf 方法输出了一个格式化字符串,其中 %s、%d 和 %.2f 分别表示字符串、整数和浮点数的格式化输出。我们使用逗号分隔的参数列表指定了要输出的值。
16
51
17
- 平时我们在控制台打印输出,是调用 ` print ` 方法和 ` println ` 方法完成的,各位用了这么久的输出语句肯定没想过这两个方法都来自于 ` java.io.PrintStream ` 类吧,哈哈。该类能够方便地打印各种数据类型的值,是一种便捷的输出方式 。
52
+ 来详细说说 printf 方法哈 。
18
53
19
- ** 打印流分类** :
54
+ ``` java
55
+ public PrintStream printf(String format, Object . .. args);
56
+ ```
20
57
21
- > 字节打印流PrintStream,字符打印流PrintWriter
58
+ 其中,format 参数是格式化字符串,args 参数是要输出的参数列表。格式化字符串包含了普通字符和转换说明符。普通字符是指除了转换说明符之外的字符,它们在输出时直接输出。转换说明符是由百分号(%)和一个或多个字符组成的,用于指定输出的格式和数据类型。
22
59
23
- ** 打印流特点 ** :
60
+ 下面是 Java 的常用转换说明符及对应的输出格式 :
24
61
25
- > A:只操作目的地,不操作数据源
26
- >
27
- > B:可以操作任意类型的数据
28
- >
29
- > C:如果启用了自动刷新,在调用println()方法的时候,能够换行并刷新
30
- >
31
- > D:可以直接操作文件
62
+ - ` %s ` :输出一个字符串。
63
+ - ` %d ` 或 ` %i ` :输出一个十进制整数。
64
+ - ` %x ` 或 ` %X ` :输出一个十六进制整数,` %x ` 输出小写字母,` %X ` 输出大写字母。
65
+ - ` %f ` 或 ` %F ` :输出一个浮点数。
66
+ - ` %e ` 或 ` %E ` :输出一个科学计数法表示的浮点数,` %e ` 输出小写字母 e,` %E ` 输出大写字母 E。
67
+ - ` %g ` 或 ` %G ` :输出一个浮点数,自动选择 ` %f ` 或 ` %e/%E ` 格式输出。
68
+ - ` %c ` :输出一个字符。
69
+ - ` %b ` :输出一个布尔值。
70
+ - ` %h ` :输出一个哈希码(16进制)。
71
+ - ` %n ` :换行符。
32
72
33
- 这个时候有同学就要问了,哪些流可以直接操作文件呢?答案很简单, ** 如果该流的构造方法能够同时接收File和String类型的参数,一般都是可以直接操作文件的 ** !
73
+ 除了转换说明符之外,Java 的 printf 方法还支持一些修饰符,用于指定输出的宽度、精度、对齐方式等。
34
74
35
- PrintStream是OutputStream的子类,PrintWriter是Writer的子类,两者处于对等的位置上,所以它们的API是非常相似的。二者区别无非一个是字节打印流,一个是字符打印流。
75
+ - 宽度修饰符:用数字指定输出的最小宽度,如果输出的数据不足指定宽度,则在左侧或右侧填充空格或零。
76
+ - 精度修饰符:用点号(.)和数字指定浮点数或字符串的精度,对于浮点数,指定小数点后的位数,对于字符串,指定输出的字符数。
77
+ - 对齐修饰符:用减号(-)或零号(0)指定输出的对齐方式,减号表示左对齐,零号表示右对齐并填充零。
36
78
37
- ## 字节输出打印流PrintStream复制文本文件
79
+ 下面是一些示例:
38
80
39
81
``` java
40
- import java.io.BufferedReader ;
41
- import java.io.FileReader ;
42
- import java.io.IOException ;
43
- import java.io.PrintStream ;
44
-
45
- public class PrintStreamDemo {
46
- public static void main (String [] args ) throws IOException {
47
- BufferedReader br= new BufferedReader (new FileReader (" copy.txt" ));
48
- PrintStream ps= new PrintStream (" printcopy.txt" );
49
- String line;
50
- while ((line= br. readLine())!= null ) {
51
- ps. println(line);
52
- }
53
- br. close();
54
- ps. close();
55
- }
56
- }
82
+ int num = 123 ;
83
+ System . out. printf(" %5d\n " , num); // 输出 " 123"
84
+ System . out. printf(" %-5d\n " , num); // 输出 "123 "
85
+ System . out. printf(" %05d\n " , num); // 输出 "00123"
86
+
87
+ double pi = Math . PI ;
88
+ System . out. printf(" %10.2f\n " , pi); // 输出 " 3.14"
89
+ System . out. printf(" %-10.4f\n " , pi); // 输出 "3.1416 "
90
+
91
+ String name = " 沉默王二" ;
92
+ System . out. printf(" %10s\n " , name); // 输出 " 沉默王二"
93
+ System . out. printf(" %-10s\n " , name); // 输出 "沉默王二 "
57
94
```
58
-
59
95
60
- ## 字符输出打印流PrintWriter复制文本文件
96
+ 具体来说,
97
+
98
+ - 我们使用 ` %5d ` 来指定输出的整数占据 5 个字符的宽度,不足部分在左侧填充空格。
99
+ - 使用 ` %-5d ` 来指定输出的整数占据 5 个字符的宽度,不足部分在右侧填充空格。
100
+ - 使用 ` %05d ` 来指定输出的整数占据 5 个字符的宽度,不足部分在左侧填充 0。
101
+ - 使用 ` %10.2f ` 来指定输出的浮点数占据 10 个字符的宽度,保留 2 位小数,不足部分在左侧填充空格。
102
+ - 使用 ` %-10.4f ` 来指定输出的浮点数占据 10 个字符的宽度,保留 4 位小数,不足部分在右侧填充空格。
103
+ - 使用 ` %10s ` 来指定输出的字符串占据 10 个字符的宽度,不足部分在左侧填充空格。
104
+ - 使用 ` %-10s ` 来指定输出的字符串占据 10 个字符的宽度,不足部分在右侧填充空格。
105
+
106
+ 接下来,我们给出一个 PrintWriter 的示例:
61
107
62
108
``` java
63
- import java.io.BufferedReader ;
64
- import java.io.FileReader ;
65
- import java.io.FileWriter ;
66
- import java.io.IOException ;
67
- import java.io.PrintWriter ;
68
- /**
69
- * 使用打印流复制文本文件
70
- */
71
- public class PrintWriterDemo {
72
- public static void main (String [] args ) throws IOException {
73
- BufferedReader br= new BufferedReader (new FileReader (" aa.txt" ));
74
- PrintWriter pw= new PrintWriter (" printcopyaa.txt" );
75
- String line;
76
- while ((line= br. readLine())!= null ) {
77
- pw. println(line);
78
- }
79
- br. close();
80
- pw. close();
81
- }
82
- }
109
+ PrintWriter writer = new PrintWriter (new FileWriter (" output.txt" ));
110
+ writer. println(" 沉默王二" );
111
+ writer. printf(" 他的年纪为 %d.\n " , 18 );
112
+ writer. close();
83
113
```
84
114
85
- > 参考链接: [ https://www.cnblogs.com/yichunguo/p/11775270.html ] ( https://www.cnblogs.com/yichunguo/p/11775270.html ) ,整理:沉默王二
115
+ 首先,我们创建一个 PrintWriter 对象,它的构造函数接收一个 Writer 对象作为参数。在这里,我们使用 FileWriter 来创建一个输出文件流,并将其作为参数传递给 PrintWriter 的构造函数。然后,我们使用 PrintWriter 的 println 和 printf 方法来输出两行内容,其中 printf 方法可以接收格式化字符串。最后,我们调用 PrintWriter 的 close 方法来关闭输出流。
86
116
117
+ 我们也可以不创建 FileWriter 对象,直接指定文件名。
118
+
119
+ ``` java
120
+ PrintWriter pw = new PrintWriter (" output.txt" );
121
+ pw. println(" 沉默王二" );
122
+ pw. printf(" 他的年纪为 %d.\n " , 18 );
123
+ pw. close();
124
+ ```
125
+
126
+ 好,关于打印流我们就说这么多,比较简单。至于 printf 的一些规则,用到的时候可以再查使用说明或者看 API 文档就可以了,记不住没关系。
87
127
88
128
---------
89
129
90
130
最近整理了一份牛逼的学习资料,包括但不限于Java基础部分(JVM、Java集合框架、多线程),还囊括了 ** 数据库、计算机网络、算法与数据结构、设计模式、框架类Spring、Netty、微服务(Dubbo,消息队列) 网关** 等等等等……详情戳:[ 可以说是2022年全网最全的学习和找工作的PDF资源了] ( https://tobebetterjavaer.com/pdf/programmer-111.html )
91
131
92
132
微信搜 ** 沉默王二** 或扫描下方二维码关注二哥的原创公众号沉默王二,回复 ** 111** 即可免费领取。
93
133
94
-
95
- ![ ] ( https://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongzhonghao.png )
134
+ ![ ] ( https://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongzhonghao.png )
0 commit comments