Java核心技术·卷Ⅱ:高级特性(原书第10版)
上QQ阅读APP看书,第一时间看更新

2.2.1 如何写出文本输出

对于文本输出,可以使用PrintWriter。这个类拥有以文本格式打印字符串和数字的方法,它还有一个将PrintWriter链接到FileWriter的便捷方法,下面的语句:

等同于:

为了输出到打印写出器,需要使用与使用System.out时相同的print、println和printf方法。你可以用这些方法来打印数字(int、short、long、float、double)、字符、boolean值、字符串和对象。

例如,考虑下面的代码:

它将把下面的字符:

输出到写出器out,之后这些字符将会被转换成字节并最终写入employee.txt中。

println方法在行中添加了对目标系统来说恰当的行结束符(Windows系统是"\r\n",UNIX系统是"\n"),也就是通过调用System.getProperty("line.separator")而获得的字符串。

如果写出器设置为自动冲刷模式,那么只要println被调用,缓冲区中的所有字符都会被发送到它们的目的地(打印写出器总是带缓冲区的)。默认情况下,自动冲刷机制是禁用的,你可以通过使用PrintWriter(Writer out,Boolean autoFlush)来启用或禁用自动冲刷机制:

print方法不抛出异常,你可以调用checkError方法来查看输出流是否出现了某些错误。

注意:Java的老手们可能会很想知道PrintStream类和System.out底怎么了。在Java 1.0中,PrintStream类只是通过将高字节丢弃的方式把所有Unicode字符截断成ASCII字符。(那时,Unicode仍旧是16位编码方式)很明显,这并非一种干净利落和可移植的方式,这个问题在Java 1.1中通过引入读入器和写出器得到了修正。为了与已有的代码兼容,System.in、System.out和System.err仍旧是输入/输出流而不是读入器和写出器。但是现在PrintStream类在内部采用与PrintWriter相同的方式将Unicode字符转换成了默认的主机编码方式。当你在使用print和println方法时,PrintStream类型的对象的行为看起来确实很像打印写出器,但是与打印写出器不同的是,它们允许我们用write(int)和write(byte[])方法输出原生字节。

java.io.PrintWriter 1.1

·PrintWriter(Writer out)

·PrintWriter(Writer writer)

创建一个向给定的写出器写出的新的PrintWriter。

·PrintWriter(String filename,String encoding)

·PrintWriter(File file,String encoding)

创建一个使用给定的编码方式向给定的文件写出的新的PrintWriter。

·void print(Object obj)

通过打印从toString产生的字符串来打印一个对象。

·void print(String s)

打印一个包含Unicode码元的字符串。

·void println(String s)

打印一个字符串,后面紧跟一个行终止符。如果这个流处于自动冲刷模式,那么就会冲刷这个流。

·void print(char[]s)

打印在给定的字符串中的所有Unicode码元。

·void print(char c)

打印一个Unicode码元。

·void print(int i)

·void print(long l)

·void print(float f)

·void print(double d)

·void print(boolean b)

以文本格式打印给定的值。

·void printf(String format,Object...args)

按照格式字符串指定的方式打印给定的值。请查看卷Ⅰ第3章以了解格式化字符串的相关规范。

·boolean checkError()

如果产生格式化或输出错误,则返回true。一旦这个流碰到了错误,它就受到了污染,并且所有对checkError的调用都将返回true。