PrintWriter和FileWriter类之间的区别

nak*_*kul 8 java file-io

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();
}
Run Code Online (Sandbox Code Playgroud)

我不明白这两种方式有什么区别.在哪种情况下我应该使用printWriter和fileWriter.

Rah*_*hul 7

尽管这两者在内部都使用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));
}
Run Code Online (Sandbox Code Playgroud)

主要区别:

  1. 如果发生任何IO故障,FileWriter会引发IOException。
  2. 没有一个PrintWriter方法抛出IOException,而是设置了一个布尔标志,可以使用checkError()获得该标志。
  3. PrintWriter带有一个在创建时自动刷新的选项(默认情况下没有自动刷新),它将在写入每个字节的数据后刷新。对于FileWriter,调用者必须注意调用flush。

  • 这是错误的:`PrintWriter在写入每个数据字节后自动调用刷新。您可以使用自动刷新来创建对象,但是默认设置是不使用自动刷新。[请参阅此处](http://docs.oracle.com/javase/7/docs/api/java/io/PrintWriter.html) (2认同)