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);