请仔细阅读以下代码:
// 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?
答案 0 :(得分:80)
PrintWriter
提供了更多方法(println
),但要注意的最重要(也是令人担忧的)差异是它吞下异常。
您可以稍后调用checkError
以查看是否发生了任何错误,但通常您会将PrintWriter
用于写入控制台或“快速”“脏”应用程序中你不想被例外所困扰(并且长期可靠性不是问题)。
我不确定为什么“额外的格式化能力”和“不要吞下异常”方面被捆绑到同一个类中 - 格式化显然在许多你不的地方很有用想要吞下异常。很高兴看到BufferedWriter
在某些时候获得相同的能力......
答案 1 :(得分:55)
BufferedWriter和PrintWriter的API参考详细说明了差异。
使用PrintWriter的主要原因是可以访问printXn(如println()。您实际上可以使用PrintWriter写入文件,就像使用System.out写入控制台一样。
BufferedWriter是一种写入文件(或其他任何东西)的有效方式,因为它会在之前(可能取决于实现)缓冲Java内存中的字符,然后放到C来写入文件。 / p>
没有“PrintReader”这样的概念;你得到的最接近的可能是java.util.Scanner。
答案 2 :(得分:8)
正如在TofuBeer所说,答案都有他们的专长。要充分利用PrintWriter(或任何其他编写器),还要使用缓冲写入,您可以将BufferedWriter包装成所需的一个,如下所示:
PrintWriter writer = new PrintWriter(
new BufferedWriter (
new FileWriter("somFile.txt")));
答案 3 :(得分:7)
PrintWriter只是以字符模式在任何Writer上公开打印方法。
根据其缓冲方法,BufferedWriter比效率更高。 它附带了一个newLine()方法,取决于您的系统平台,可以正确操作文本文件。BufferedReader允许从文件中读取文本,字节转换为字符。它允许逐行读取。
没有PrintReader,您必须根据输入的格式选择其他Reader实现。
答案 4 :(得分:2)
通常,Writer会立即将其输出发送到基础字符或字节流。除非需要提示输出,否则建议将BufferedWriter包装在任何write()操作可能代价高昂的Writer周围,例如FileWriters和OutputStreamWriters。例如,
注意:代码块中的文本内容是自动换行的
PrintWriter out =
new PrintWriter(new BufferedWriter(new FileWriter("foo.out")));
会将PrintWriter的输出缓冲到文件中。如果没有缓冲,每次调用print()方法都会导致字符转换为字节,然后立即写入文件,这可能效率很低。
答案 5 :(得分:2)
PrintWriter 是将字符数据写入文件的功能最强大的Writer。
与FileWriter和BufferedWriter相比,PrintWriter的主要优点是:
PrintWriter printwriter = new PrintWriter("blah.txt");
(或)
FileWriter filewriter = new FileWriter("blah.txt");
PrintWriter printwiter = new PrintWriter(filewriter);
我们可以将任何类型的Primitive数据直接写入文件中(因为我们还有PrintWriter方法的其他重载版本,即print()和println())。
printwriter.print(65); //65
bufferedwriter.write(65); //A
printwriter.println(true); //true
答案 6 :(得分:0)
BufferedWriter - 将文本写入输出字符流,缓冲字符流中的字符。 PrintWriter - 将对象的格式化表示打印到文本输出流。
答案 7 :(得分:-1)
我认为上面已经提到了使用PrintWriter的原因,但其中一个重要原因是你将文件对象直接传递给PrintWriter构造函数,这使得它易于使用。
File file=new File(“newfile.txt”);
PrintWriter pw=new PrintWriter(file);