PrintWriter与Java中的FileWriter

时间:2011-04-22 20:52:12

标签: java filewriter printwriter

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

}

7 个答案:

答案 0 :(得分:26)

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

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

PrintWriter& FileWriter的。

相似性

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

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

答案 1 :(得分: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提供了特殊方法:

  

打印格式化的表示形式   对象到文本输出流。这个   class实现了所有的print   PrintStream中的方法。确实如此   不包含写原始的方法   程序应该使用的字节数   未编码的字节流。

     

与PrintStream类不同,如果   它会启用自动刷新   只有当其中一个打印出来时,   调用printf或格式方法,   而不是每当换行   字符恰好输出。这些   方法使用平台自己的概念   行分隔符而不是   换行符。

答案 2 :(得分:5)

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

答案 3 :(得分:3)

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

答案 4 :(得分:3)

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

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

答案 5 :(得分:0)

仅提供与FileOutputStream相关的FLUSH和Close menthod相关的更多信息

flush()---只是确保将所有缓冲的数据写入磁盘,并且随后准备再次写入流(或写入器)。

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

答案 6 :(得分:0)

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