Java IO:PrintWriter

时间:2020-01-09 10:36:06  来源:igfitidea点击:

JavaPrintWriter类(java.io.PrintWriter)使我们可以将格式化的数据写入底层的Writer。例如,写入" int"," long"和其他原始数据,其格式设置为文本,而不是其字节值。

如果我们要生成必须混合文本和数字的报告(或者类似报告),则JavaPrintWriter很有用。 " PrintWriter"类具有与" PrintStream"相同的所有方法,除了用于写入原始字节的方法外。作为Writer的子类,PrintWriter用于编写文本。

PrintWriter示例

这是一个简单的JavaPrintWriter示例:

FileWriter  writer      = new FileWriter("d:\data\report.txt");
PrintWriter printWriter = new PrintWriter(writer);

printWriter.print(true);
printWriter.print((int) 123);
printWriter.print((float) 123.456);

printWriter.printf(Locale.UK, "Text + data: %1$", 123);

printWriter.close();

此示例首先创建一个连接到FileWriter的PrintWriter实例。其次,该示例将"布尔"," int"和" float"写入" PrintWriter"。第三,该示例调用了PrintWriter的高级printf()方法,该方法可以将格式化的数字插入文本字符串中。最后,关闭" PrintWriter"。

PrintWriter构造函数

" PrintWriter"具有多种构造器,使我们可以将其连接到" File"," OutputStream"或者" Writer"。这样," PrintWriter"与其他" Writer"子类有所不同,后者通常具有大多数构造函数,这些构造函数可以将其他" Writer"实例作为参数(除了少数几个,例如" OutputStreamWriter")。

print()和format()

JavaPrintWriter类包含函数强大的format()printf()方法。两种方法的作用完全相同,但是C程序员更熟悉" printf"这个名称。通过format()和printf()方法,我们可以使用格式字符串以非常高级的方式混合文本和数据。有关format()printf()的更多信息,请参见此页面:

https://docs.oracle.com/javase/tutorial/java/data/numberformat.html

关闭PrintWriter

完成向JavaPrintWriter写入字符后,我们应该记住将其关闭。关闭" PrintWriter"也会关闭" PrintWriter"正在写入的" Writer"实例。

关闭PrintWriter的方法是调用其close()方法。这是关闭PrintWriter的样子:

printWriter.close();

我们还可以使用Java 7中引入的try-with-resources构造。这是如何使用try-with-resources构造使用和关闭PrintWriter外观的方法:

FileWriter writer = new FileWriter("data/report.txt");

try(PrintWriter printWriter =
    new PrintWriter(writer)){

    printWriter.write("Hello World ");
    printWriter.write((int)123);

}

请注意,不再有任何显式的close()方法调用。 try-with-resources构造可以解决这一问题。

还要注意,第一个FileWriter实例不是在try-with-resources块内创建的。这意味着try-with-resources块不会自动关闭此FileWriter实例。但是,当关闭PrintWriter时,它也会同时关闭写入的OutputStream实例,因此,当PrintWriter关闭时,FileWriter实例也会关闭。