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();
}
}
根据coderanch.com,如果我们结合我们得到的答案:
FileWriter是IO的字符表示。这意味着它可以用来写字符。在内部,FileWriter将使用底层操作系统的默认字符集,并将字符转换为字节并将其写入磁盘。
PrintWriter和FileWriter。
相似
差异
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
这两个都在内部使用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方法之一时才会执行,而不是每当输出换行符时。这些方法使用平台自己的行分隔符概念而不是换行符。
PrintWriter
有不同的错误处理概念。你需要调用checkError()
而不是使用try / catch块。
PrintWriter
不会扔IOException
。你应该为此目的调用checkError()
方法。
Java5 +中的java.io.PrintWriter
允许写入文件的便捷方法/构造函数。来自Javadoc;
使用指定的文件创建一个没有自动行刷新的新PrintWriter。此便捷构造函数创建必要的中间OutputStreamWriter,它将使用此虚拟机实例的默认字符集对字符进行编码。
只是为了提供与FileOutputStream相关的FLUSH和Close方法相关的更多信息
flush()---只是确保将任何缓冲的数据写入磁盘完全刷新,然后再准备再次写入流(或编写器)。
close()----刷新数据并关闭任何文件句柄,套接字或其他任何内容。现在连接已丢失,您无法向outputStream写入任何内容。
java.io.FileWriter依赖于平台的默认字符编码这一事实使我对它毫无用处。您永远不应该假设部署应用程序的环境。