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

主要差异:

  1. 在任何IO故障的情况下,FileWriter都会抛出IOException。
  2. 没有PrintWriter方法抛出IOException,而是设置一个布尔标志,可以使用checkError()获得。
  3. PrintWriter在创建时附带了autoflush选项(默认情况下没有autoflush),它会在写入每个数据字节后刷新。 在FileWriter的情况下,调用者必须负责调用flush。

PrintWriter为您提供了一些方便的格式化方法,如printlnprintf 。 因此,如果您需要编写印刷文本 – 您可以使用它。 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()来查询是否发生了任何错误”