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

java.io.PrintWriter和java.io.BufferedWriter之间的区别?,java,file,stream,filereader,bufferedreader,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); Bu

请查看下面的代码:

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

API参考,并详细说明差异

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

BufferedWriter是写入文件(或其他任何内容)的一种有效方法,因为它会在(可能,取决于实现)将字符放入C以写入文件之前在Java内存中进行缓冲


没有“打印阅读器”这样的概念;最接近的可能是。

PrintWriter
提供了更多的方法(
println
),但需要注意的最重要(也是令人担忧的)区别是它包含异常

您可以稍后调用
checkError
查看是否发生了任何错误,但通常您会使用
PrintWriter
进行诸如写入控制台之类的操作,或者在“quick'n dirty”应用程序中使用,在这些应用程序中,您不希望受到异常的困扰(并且长期可靠性不是问题)


我不知道为什么“额外的格式化能力”和“不吞咽异常”方面被捆绑到同一个类中——在许多不希望吞咽异常的地方,格式化显然是有用的。很高兴看到BufferedWriter在某一点上获得了相同的能力…

正如TofuBeer在回答中所说,两者都有各自的特长。要充分利用PrintWriter(或任何其他写入程序)的优势,同时使用缓冲写入,您可以使用所需的缓冲写入程序包装缓冲写入程序,如下所示:

PrintWriter writer = new PrintWriter(
                         new BufferedWriter (
                             new FileWriter("somFile.txt")));

PrintWriter只是以字符模式在任何写入程序上公开打印方法

根据缓冲方法,BufferedWriter的效率高于。 它附带了一个newLine()方法,根据您的系统平台,可以正确操作文本文件

BufferedReader允许从文件中读取文本,并将字节转换为字符。它允许逐行阅读


没有PrintReader,您必须根据输入的格式选择另一个Reader实现。

我认为上面已经提到了使用PrintWriter的原因,但其中一个重要原因是您可以将文件对象直接传递给PrintWriter构造函数,从而使其易于使用

File file=new File(“newfile.txt”);
PrintWriter pw=new PrintWriter(file);

通常,写入程序将其输出立即发送到底层字符或字节流。除非需要提示输出,否则建议将BufferedWriter包装在任何write()操作可能代价高昂的编写器周围,例如FileWriter和OutputStreamWriter。比如说,

注意:代码块中的文本内容会自动换行

打印输出=
新的PrintWriter(新的BufferedWriter(新的FileWriter(“foo.out”)))


将PrintWriter的输出缓冲到文件中。如果没有缓冲,每次调用print()方法都会将字符转换为字节,然后立即写入文件,这可能非常低效

BufferedWriter—将文本写入输出字符流,缓冲字符流中的字符。
PrintWriter—将对象的格式化表示形式打印到文本输出流

PrintWriter是将字符数据写入文件的最强大的写入程序

与FileWriter和BufferedWriter相比,PrintWriter的主要优势是:

  • PrintWriter可以直接与文件通信,也可以通过某些Writer对象进行通信
  • PrintWriter PrintWriter=新的PrintWriter(“blah.txt”)

    (或)

  • 我们可以将任何类型的基元数据直接写入文件(因为我们有额外的PrintWriter方法重载版本,即print()和println())

    printwriter.print(65)//65

    bufferedwriter.write(65)//A

    printwriter.println(true)//正确


  • 记住@Jons的评论,版画作者将接受例外。应该调用checkError。至少在当前的openJDK 8实现中(可能是较旧的版本),
    PrinterWriter
    已经在某个时候创建了一个
    BufferedWriter
    @TritonMan,它需要与操作系统交互,这意味着要跳出Java。但是PrintWriter也被缓冲,对吗?因此,它们之间并没有本质上的区别,因为您的回答可能会暗示PrintWriter是缓冲的,但区别在于PrintWriter拥有的方法。我不认为我暗示了什么…你写的关于BufferedWriter的东西-这对PrintWriter是否也是真的?仍然不清楚我,因为我认为这个答案是关于differences@WindyFields:否,
    PrintStream
    是一个
    OutputStream
    PrintWriter
    是一名
    Writer
    。谢谢。“它会吞噬异常。”你是说PrintWriter不会引发选中的异常?那么未检查的异常呢?@Ben:我特别提到的是
    IOException
    ,因为每个其他IO抽象(
    Reader
    Writer
    等)都声明,如果出现问题,它的方法会抛出
    IOException
    PrintWriter
    FileWriter filewriter = new FileWriter("blah.txt");
    PrintWriter printwiter = new PrintWriter(filewriter);