Java之路:打印流

如果我们要想进行数据的输出,首先想到的就是要使用OutputStream类,但这个类在进行输出数据的时候并不是十分方便。

OutputStream类之中所提供的write()方法只适合输出字节数组,但如果要求输出字符、数字、日期,OutputStream类就不能很方便地胜任工作了。

在Java的I/O包中,打印流是一个输出信息最方便的流类,它可以将原样输出各种类型的类型。

除了输出数据,打印流还提供两项其他功能:
(1)与其他输出流不同的是,打印流的方法不会抛出IOException,其异常情况仅设置内部标志位, 这些标志位可通过checkError() 方法来读取。
(2)打印流具有自动刷新的功能。 例如,当写入字节数组时,flush()方法会被自动调用。

打印流的使用

为了简化输出的操作难度,在Java中提供了两种打印流:PrintStream(字节打印流)和PrintWriter (字符打印流)

1、PrintStream(字节打印流)

下面首先以PrintStream类为例进行分析,观察PrintStream类的继承结构。

java.lang.Object
|- java.io.OutputStream
|- java.io.FilterOutputStream
    |- java.io.PrintStream

对于打印流而言,它所使用的设计模式称为装饰设计模式,即将一个设计不是非常完善的功能,添加一些代码之后变得完善起来。

PrintStream类提供了一系列的print和println方法,可以实现将基本数据类型的格式转换成字符串输出。在前面的程序中大量用到的“System.out.println”语句中的System.out,就是PrintStream类的一个实例对象。PrintStream有下面几个构造方法:

PrintStream(OutputStream out)
PrintStream(OutputStream out,boolean autoflush)
PrintStream(OutputStream out,boolean autoflush, String encoding)

其中,autoflush控制在Java中遇到换行符(\n)时是否自动清空缓冲区,encoding是指定编码方式

Java的PrintStream对象具有多个重载的print和println方法,它们可输出各种类型(包括Object)的数据。

对于基本数据类型的数据,print和println方法会先将它们转换成字符串的形式,然后再输出,而不是输出原始的字节内容,如整数221的打印结果是字符“2”、“2”、“1”所组合成的一个字符串,而不是整数221在内存中的原始字节数据。

对于一个非基本数据类型的对象,print和println方法会先调用对象的toString方法,然后输出toString方法所返回的字符串。

2、PrintWriter (字符打印流)

在Java的I/O包中,提供了一个与PrintStream对应的PrintWriter类,PrintWriter类有下列几个构造方法:

PrintWriter(OutputStream)
PrintWriter(OutputStream, boolean)
PrintWriter(Writer)
PrintWriter(Writer, boolean)

PrintWriter即使遇到换行符(\n)也不会自动清空缓冲区,只在设置了autoflush模式下使用了println方法后才会自动清空缓冲区。

PrintWriter相对PrintStream最便利的一个地方就是println方法的行为,在Windows下的文本换行是“\r\n”,而在Linux下的文本换行是“\n”。如果希望程序能够生成平台相关的文本换行,而不是在各种平台下都用“\n”作为文本换行,那么就应该使用PrintWriter的println方法,PrintWriter的println方法能根据不同的操作系统而生成相应的换行符。

【示例1】 :向屏幕输出信息

package com.xy.io;

import java.io.PrintWriter;

public class PrintWriterDemo {
	public static void main(String[] args) {
		PrintWriter out = null;
		// 通过System.out对PrintWriter实例化
		out = new PrintWriter(System.out);
		// 向屏幕上输出
		out.print("Hello world!");
		out.close();
	}
}

【结果】
在这里插入图片描述

【示例2】 : 向文件中输出信息

package com.xy.io;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;

public class PrintWriterDemo2 {
	public static void main(String[] args) {
		PrintWriter out = null;
		File f = new File("C:\\Users\\XY\\Desktop\\PrintWriter.txt");
		try {
			/* FileWriter() 创建一个可以写文件的Write类
			 * PrintWriter(Writer)
			 * */
			out = new PrintWriter(new FileWriter(f));
		}
		catch(IOException e) {
			e.printStackTrace();
		}
		out.print("Hello world!!!");
		out.close();
	}
}

【结果】
在这里插入图片描述

如果由程序向一个终端输出数据时,一定要使用打印流。

猜你喜欢

转载自blog.csdn.net/qq_43555323/article/details/84978499
今日推荐