我在写文件时遇到问题:
FileInputStream fin;
try
{
fin = new FileInputStream ("c:/text.txt");
PrintStream p = new PrintStream(fin);
p.println ("test");
fin.close();
}
catch (IOException ioe)
{
System.err.println (ioe.getMessage);
}
这段代码有问题吗?
答案 0 :(得分:6)
您需要使用FileOutputStream
。
答案 1 :(得分:5)
习惯以下结构。你将在Java中大量使用它。
PrintStream out = null;
try {
out = new PrintStream(new FileOutputStream("c:/text.txt"));
out.println ("test");
} catch (IOException e) {
System.err.println (e.getMessage);
} finally {
if (out != null) {
try { out.close(): } catch (Exception e) { }
}
out = null; // safe but not strictly necessary unless you reuse fin in the same scope
}
至少等到ARM blocks希望在Java 7中出现。
如上所述,您应该关闭PrintStream
而不是FileOutputStream
,因此以上是更好的使用形式。
答案 2 :(得分:3)
该代码的问题立刻引起了我的注意:
acquire(); try { use(); } finally { release(); }
。PrintStream
吞下例外情况。 BufferedOutputStream
更好。PrintStream
置于自动刷新模式,这可能是性能问题。/
作为Windows路径分隔符。你可能能够逃脱它,但它并不好。所以:
FileOutputStream fileOut = new FileOutputStream(
"c:\\text.txt"
);
try {
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(
fileOut,
"UTF-8" // Or, say, Charset.defaultCharset()
));
out.write("test");
out.newLine()
out.flush();
} finally {
fileOut.close();
}
答案 3 :(得分:0)
类:FileInputStream
用于读取文件的输入。如果要写入文件,可以使用:FileOutputStream
。如果你想让生活变得轻松,你也可以使用BufferedOutputStream
。
正如所指出的那样,你应该在finally块中关闭你的流。你想要这样做的原因是你的程序不是很小,而且它是一个更大的应用程序。例如,如果您忘记关闭文件流,应用程序将保留它,如果您尝试在文件系统上执行某些操作(至少在Windows中),您将无法执行此操作。我们都看到'文件无法删除,因为它仍处于使用中'错误。
以下是使用FileOutputStream + BufferedOutputStream的示例:http://www.javadb.com/write-to-file-using-bufferedoutputstream。