PrintWriter和FileWriter类之间的区别
try{ File file = new File("write.txt"); FileWriter writer = new FileWriter(file); PrintWriter printWriter = new PrintWriter(writer); printWriter.println("pqr"); printWriter.println("jkl"); printWriter.close(); PrintWriter printWriter = new PrintWriter(file); printWriter.println("abc"); printWriter.println("xyz"); printWriter.close(); }
我不明白这两种方式有什么区别。 在哪种情况下我应该使用printWriter和fileWriter。
虽然这两个内部都使用FileOutputStream,但主要区别在于PrintWriter提供了一些其他格式化方法,如println和printf。
代码片段:
public PrintWriter(File file) throws FileNotFoundException { this(new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file))), false); } public FileWriter(File file) throws IOException { super(new FileOutputStream(file)); }
主要差异:
- 在任何IO故障的情况下,FileWriter都会抛出IOException。
- 没有PrintWriter方法抛出IOException,而是设置一个布尔标志,可以使用checkError()获得。
- PrintWriter在创建时附带了autoflush选项(默认情况下没有autoflush),它会在写入每个数据字节后刷新。 在FileWriter的情况下,调用者必须负责调用flush。
PrintWriter
为您提供了一些方便的格式化方法,如println
和printf
。 因此,如果您需要编写印刷文本 – 您可以使用它。 FileWriter
更像是“低级”编写器,它使您能够只编写字符串和char数组。 基本上我不认为你选择的有很大的不同。
从源代码传递文件时PrintWriter所做的是以缓冲方式打开它
public PrintWriter(File file) throws FileNotFoundException { this(new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file))), false); }
如果你传递一个FileWriter,它将打开它, 而不进行缓冲
public FileWriter(File file) throws IOException { super(new FileOutputStream(file)); }
这意味着第一个示例可以稍微更高效。 但是我会在没有FileWriter
情况下使用File
,因为对我来说它更简单。
虽然FileWriter只有一组基本方法,但PrintWriter有一套丰富的方便方法,其中一种方法就在你的例子中PrintWriter.println
。
您还应该记住,“此类中的方法永远不会抛出I / Oexception,尽管它的一些构造函数可能。客户端可以通过调用checkError()来查询是否发生了任何错误”