本文是对作为Java生态系统一部分的Printstream Java类的快速介绍。
1.1.简介
流指的是最低级别的数据,本质上是字节。为了从源头读取和处理数据,数据需要被保存。输出流是将数据保存到汇中的手段。
Outputstream 是所有代表字节输出流的类的超类。一个输出流接受输出字节并将它们发送到某个汇中。需要定义 的子类的应用程序必须始终提供至少一个写入一个字节输出的方法。OutputStream
一个PrintStream 是Outputstream 的实现。它还提供了方便地打印各种数据值的表示方法。PrintStream 在出现异常情况时设置一个错误标志,而不是抛出IOException ,并自动冲到汇中。
[`PrintWriter`](https://docs.oracle.com/javase/8/docs/api/java/io/PrintWriter.html)应该用来写入字符而不是字节。它使用平台的默认字符编码,将字符转换成字节。
2.构造函数
在这一节中,我们将看一下初始化Printstream 的一些方法。我们可以直接传递一个要写入的文件名:
PrintStream printStream = new PrintStream("test.txt");
Printstream 使用 的一个实例来写入最终的目的地。这里,文件名被传递给 类,该类为传递的文件名创建相应的文件句柄。Outputstream FileOutputstream
FileOutputStream fileOutputStream = new FileOutputStream("test.txt");
PrintStream printStream = new PrintStream(fileOutputStream);
与上面唯一不同的是我们手动创建了Outputstream ,并传递给Printstream 。虽然我们传递了FileOutputstream ,但它可以是任何其他的。例如,在写到网络套接字的情况下,SocketOutputstream 。
在上述两种方法中,数据不会立即写到目的地。它被存储在一个缓冲区中,只有在手动刷新或句柄退出时才会写入。
FileOutputStream fileOutputStream = new FileOutputStream("test.txt");
PrintStream printStream = new PrintStream(fileOutputStream,true);
另外,构造函数有一个刷新参数,每当写入一个字节数组或换行符时,都会刷新到输出流。构造函数的另一个变体是接受一个字符编码作为输入。
FileOutputStream fileOutputStream = new FileOutputStream("test.txt");
PrintStream printStream = new PrintStream(fileOutputStream, true, "UTF-8");
在这里,UTF-8被指定为写文件时需要使用的字符编码。
3.方法
3.1 打印
上述方法被用来写入以下数据类型的值
- char
- long
- float
- int
- 字符阵列
- double
- 字符串
- 布尔型
- 对象
除了下面提到的几种数据类型,该方法对大多数数据类型使用String.valueOf 。
对于布尔值,如果是真值,它就写成真,否则就写成假。它使用缓冲写入器将字符数组和字符串本机写入目的地。它将一个空值转换为明确的空值,并将其写入目的地:
printStream.print("hi");
printStream.print((Object) null);
对于上述代码,我们得到以下结果
hinull
3.2 println
这与print 非常相似,只是在每次调用后,会在目的地创建一个换行。用println 运行同样的例子,如下所示:
printStream.println("hi");
printStream.print((Object) null);
printStream.print("hello");
hi
nullhello
这里,null出现在第二行,因为之前的println ,插入了一个换行。但是null和hello出现在同一行中。
3.3 附加
它与print非常相似,只是它采取了一种方便的方法,只写字符串或字符序列的一部分。
printStream.println("hi");
printStream.print((Object) null);
printStream.append("hello",0,3);
在这里,进行子串操作。即从索引0到2的字符,不包括指定的结束位置(3)被提取并写入目的地。
hi
nullhel
3.4 printf
这是用指定的格式字符串将文本写到目的地。指定的格式字符串符合Java格式的规定。
printStream.printf("%nIt is %d year to %s", 1, "2021");
- 我们指定%n来在目的地插入换行。
- %d用来表示要写入的整数,而%s则指定要写出的字符串。
- 运行这个程序产生以下输出
It is 1 year to 2021
这个选项需要一个locale参数来指定需要格式化的字符串所处的locale。
3.5 写入
这基本上是用来写字节的,对我们的类来说可能不是一个可靠的用例。
printStream.write("bytes".getBytes());
上面的printstreams例子将字节的字符串表示转换为字节数组,并使用write方法传递到目的地。
bytes
3.6 关闭
这个方法用来关闭底层流,即OutputStream 、OutputStreamWriter 和BufferedWriter 。这确保了资源被释放,好的做法是在不再需要这些资源后再明确地调用close。
printStream.close();
printStream.println("text not written");
指定的文本不会被写入,因为在写入文本之前已经调用了close。
3.7 checkError
这是用来检查PrintStream 类中的错误。java中的Printstream会抛出任何异常,但会设置一个内部标志。
printStream.close();
printStream.println("text not written");
System.out.println("Error State:" + printStream.checkError());
考虑到这个例子,我们可以使用checkError 来识别错误的存在。上面的例子会向控制台打印真。
在这篇文章中,我们已经通过各种例子看到了PrintStream 方法和构造函数的使用。