39

Java中的PrintWriter和FileWriter是否相同,无论使用哪一个?到目前为止,我都使用了两者,因为它们的结果是相同的。是否有一些特殊情况下偏好其中一种是有意义的?

public static void main(String[] args) {

    File fpw = new File("printwriter.txt");
    File fwp = new File("filewriter.txt");
    try {
        PrintWriter pw = new PrintWriter(fpw);
        FileWriter fw = new FileWriter(fwp);
        pw.write("printwriter text\r\n");
        fw.write("filewriter text\r\n");
        pw.close();
        fw.close();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}
4

7 回答 7

36

根据 coderanch.com,如果我们结合我们得到的答案:

FileWriter 是 IO 的字符表示。这意味着它可以用来写字符。在内部,FileWriter 将使用底层操作系统的默认字符集并将字符转换为字节并将其写入磁盘。

PrintWriter 和 FileWriter。

相似之处

  1. 两者都从 Writer 扩展而来。
  2. 两者都是字符表示类,这意味着它们使用字符并使用默认字符集将它们转换为字节。

差异

  1. FileWriter 在任何 IO 失败的情况下抛出 IOException,这是一个检查异常。
  2. 所有的 PrintWriter 方法都不会抛出 IOExceptions,而是设置一个布尔标志,可以使用 checkError() 获得。
  3. PrintWriter 有一个可选的构造函数,您可以在调用特定方法时使用它来启用自动刷新。FileWriter 中不存在这样的选项。
  4. 当写入文件时,FileWriter 有一个可选的构造函数,允许它在调用“write()”方法时附加到现有文件。

PrintStream 和 OutputStream 的区别:和上面的解释类似,只是将字符替换为字节。

PrintWriter 有以下方法:

close()
flush()
format()
printf()
print()
println()
write()

和构造函数是:

File (as of Java 5)
String (as of Java 5)
OutputStream
Writer

而 FileWriter 具有以下方法:

close()
flush()
write()

和构造函数是:

File
String 

链接: http: //www.coderanch.com/t/418148/java-programmer-SCJP/certification/Information-PrintWriter-FileWriter

于 2011-04-22T21:03:16.447 回答
11

这两个都在FileOutputStream内部使用:

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

但主要区别在于 PrintWriter 提供了特殊的方法:

将对象的格式化表示打印到文本输出流。此类实现了 PrintStream 中的所有打印方法。它不包含写入原始字节的方法,程序应该使用未编码的字节流。

与 PrintStream 类不同,如果启用了自动刷新,它将仅在调用 println、printf 或 format 方法之一时完成,而不是在碰巧输出换行符时完成。这些方法使用平台自己的行分隔符概念,而不是换行符。

于 2011-04-22T20:56:24.803 回答
6

APrintWriter有不同的错误处理概念。您需要调用checkError()而不是使用 try/catch 块。

于 2011-04-22T20:56:39.513 回答
3

PrintWriter不会抛出IOException。您应该checkError()为此调用方法。

于 2011-04-22T20:58:03.723 回答
3

java.io.PrintWriterJava5+ 中允许写入文件的便捷方法/构造函数。来自 Javadoc;

使用指定的文件创建一个新的 PrintWriter,而不自动刷新行。这个方便的构造函数创建了必要的中间 OutputStreamWriter,它将使用 Java 虚拟机的这个实例的默认字符集对字符进行编码。

于 2011-04-22T20:58:32.993 回答
0

只是为了提供更多与 FLUSH 相关的信息和与 FileOutputStream 相关的 Close menthod

flush() ——只是确保所有缓冲的数据都完全刷新写入磁盘,并准备好之后再次写入流(或写入器)。

close() ----刷新数据并关闭任何文件句柄、套接字或其他任何东西。现在连接已丢失,您无法向 outputStream 写入任何内容。

于 2015-05-05T12:45:53.807 回答
0

java.io.FileWriter 依赖于平台的默认字符编码这一事实使它对我来说毫无用处。你永远不应该假设你的应用程序将被部署的环境。

于 2017-07-02T10:22:58.483 回答