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

时间:2009-11-17 06:52:31

标签: java file stream filereader bufferedreader

请仔细阅读以下代码:

// 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?

8 个答案:

答案 0 :(得分:80)

PrintWriter提供了更多方法(println),但要注意的最重要(也是令人担忧的)差异是它吞下异常

您可以稍后调用checkError以查看是否发生了任何错误,但通常您会将PrintWriter用于写入控制台或“快速”“脏”应用程序中你不想被例外所困扰(并且长期可靠性不是问题)。

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

答案 1 :(得分:55)

BufferedWriterPrintWriter的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的主要优点是:

  1. PrintWriter可以直接与文件通信,也可以通过某些Writer对象进行通信。

PrintWriter printwriter = new PrintWriter("blah.txt");

(或)

FileWriter filewriter = new FileWriter("blah.txt");
PrintWriter printwiter = new PrintWriter(filewriter);
  1. 我们可以将任何类型的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);