11
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。

4

5 回答 5

10

尽管这两个内部都使用 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. FileWriter 在任何 IO 失败的情况下抛出 IOException。
  2. 所有的 PrintWriter 方法都不会抛出 IOException,而是设置了一个布尔标志,可以使用 checkError() 获得。
  3. PrintWriter 带有一个在创建时自动刷新的选项(默认是没有自动刷新),它将在写入每个数据字节后刷新。在 FileWriter 的情况下,调用者必须负责调用刷新。
于 2012-12-28T10:11:03.777 回答
2

从源头上,当您传递文件时 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));
}

这意味着第一个示例可能会更有效。但是,我会使用File不带的,FileWriter因为对我来说它更简单。

于 2012-12-28T10:11:57.020 回答
1

PrintWriter为您提供一些方便的方法来格式化printlnprintf. 因此,如果您需要编写打印文本 - 您可以使用它。FileWriter更像是“低级”编写器,它使您能够只编写字符串和字符数组。基本上我不认为你选择什么有很大的不同。

于 2012-12-28T10:11:48.730 回答
0

虽然 FileWriter 只有一组基本方法,但 PrintWriter 有一组丰富的便捷方法,其中一个在您的示例中 - PrintWriter.println

你还应该记住“这个类中的方法从不抛出 I/O 异常,尽管它的一些构造函数可能会。客户端可以通过调用 checkError() 来询问是否发生了任何错误”

于 2012-12-28T10:17:06.887 回答
0

两者之间最重要的区别之一是,使用 FileWriter 可以将文本附加到现有文件的末尾,而使用 PrintWriter 则不能。

于 2021-05-16T15:05:10.577 回答