PrintWriter与Java中的FileWriter

问题描述 投票:33回答:7

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

}
java filewriter printwriter
7个回答
27
投票

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

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

PrintWriter和FileWriter。

相似

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

差异

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

PrintStream和OutputStream之间的区别:与上面的解释类似,只需用byte替换字符。

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


9
投票

这两个都在内部使用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方法之一时才会执行,而不是每当输出换行符时。这些方法使用平台自己的行分隔符概念而不是换行符。


5
投票

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


3
投票

PrintWriter不会扔IOException。你应该为此目的调用checkError()方法。


3
投票

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

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


0
投票

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

flush()---只是确保将任何缓冲的数据写入磁盘完全刷新,然后再准备再次写入流(或编写器)。

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


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.