java.io.PrintWriter和java.io.BufferedWriter之间的区别?

2022-08-31 10:09:10

请仔细阅读以下代码:

// A.class
File file = new File("blah.txt");
FileWriter fileWriter = new FileWriter(file);
PrintWriter printWriter = new PrintWriter(fileWriter);

// B.class
File file = new File("blah.txt");
FileWriter fileWriter = new FileWriter(file);
BufferedWriter bWriter = new BufferedWriter(fileWriter);

这两种方法有什么区别?

我们什么时候应该使用PrintWriter而不是BufferedWriter?


答案 1

PrintWriter给出了更多的方法(),但要注意的最重要(和令人担忧)的区别是它吞噬了异常println

您可以稍后致电以查看是否发生了任何错误,但通常您会用于诸如写入控制台之类的事情 - 或者在“快速'n脏”应用程序中,您不希望被异常打扰(并且长期可靠性不是问题)。checkErrorPrintWriter

我不确定为什么“额外的格式化能力”和“不要吞咽异常”方面被捆绑到同一个类中 - 格式化显然在许多你不希望例外被吞噬的地方很有用。很高兴看到在某个时候获得相同的能力......BufferedWriter


答案 2

BufferedWriter 和 PrintWriter 的 API 参考详细介绍了这些差异。

使用PrintWriter的主要原因是访问printXXX方法,如println()。您基本上可以使用 PrintWriter 写入文件,就像使用 System.out 写入控制台一样。

BufferedWriter是写入文件(或其他任何东西)的有效方法,因为它会在(可能取决于实现)下降到C以写入文件之前(可能取决于实现)缓冲Java内存中的字符。

没有“PrintReader”这样的概念;你得到的最接近的可能是java.util.Scanner