java.io.PrintWriter和java.io.BufferedWriter之间的区别?
请看下面的代码:
// 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);
这两种方法有什么区别?
什么时候应该使用BufferedWriter上的PrintWriter?
使用PrintWriter的主要原因是访问printXXX方法(如println(int))。 您可以使用PrintWriter写入文件,就像使用System.out写入控制台一样。
BufferedWriter是写入文件(或其他任何东西)的有效方法,因为它会cachingJava内存中的字符(可能取决于具体实现),然后放到C中来写入文件。
没有像“PrintReader”这样的概念最接近你可能是java.util.Scanner。
PrintWriter
给出了更多的方法( println
),但是最重要的(和令人担忧的)区别是它吞噬了exception 。
稍后您可以调用checkError
来查看是否发生了任何错误,但是通常情况下,您可以使用PrintWriter
来写入控制台,或者在“快速”“肮脏”的应用程序中,您不希望被exception打扰并且长期可靠性不是问题)。
我不确定为什么“额外的格式化能力”和“不吞下例外”方面被捆绑到同一类中 – 格式化在许多地方显然是有用的,在这些地方你不希望例外被吞噬。 很高兴看到BufferedWriter
在某个时候获得了相同的能力。
正如TofuBeer所说的答案都有其特色。 为了充分利用PrintWriter(或任何其他作者)的优势,还可以使用缓冲写入function,可以使用所需的BufferedWriter包装:
PrintWriter writer = new PrintWriter( new BufferedWriter ( new FileWriter("somFile.txt")));
PrintWriter仅以字符模式暴露任何Writer上的打印方法。
根据缓冲方法,BufferedWriter比效率更高。 它带有一个newLine()方法,根据您的系统平台,正确操作文本文件。
BufferedReader允许从文件中读取文本,并以字符转换字节。 它允许逐行阅读。
没有PrintReader,您必须根据input的格式select另一个Reader实现。
通常,Writer将其输出立即发送到底层字符或字节stream。 除非需要提示输出,否则build议在Write()操作可能代价高昂的Writer(如FileWriters和OutputStreamWriters)周围包装BufferedWriter。 例如,
注意:代码块中的文本内容是自动换行的
PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("foo.out")));
将缓冲PrintWriter的输出到文件。 如果不进行缓冲,每次调用print()方法都会导致字符被转换为字节,然后立即将其写入文件,效率可能非常低。
BufferedWriter – 将文本写入输出字符stream,缓冲字符stream中的字符。 PrintWriter – 将对象的格式化表示forms打印到文本输出stream。
我认为使用PrintWriter的原因已经在上面提到,但其中一个重要的原因是你直接将一个文件对象传递给PrintWriter构造函数,这使得它易于使用。
File file=new File(“newfile.txt”); PrintWriter pw=new PrintWriter(file);