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();
}
}
答案 0 :(得分:26)
根据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
答案 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依赖于平台的默认字符编码这一事实使我对它毫无用处。您永远不应该假设部署应用程序的环境。