public static void print(String id) {
try{
FileWriter fstream = new FileWriter("out.txt");
BufferedWriter out = new BufferedWriter(fstream);
out.write(id +"\n");
out.close();
}catch (Exception e){
}
}
我在运行时调用此方法数十万次,但它会一直覆盖第一行。如何从最底线开始? (我负责使用转义序列定义的下一行。)
或者是否有更优雅的解决方案?打开和关闭文本文件数十万次来存储我的模拟结果效率不高。但话说回来,如果我在所有执行结束时关闭main,我会与许多人发生冲突,他们说I / O的一切都应该放在try / catch块中(同样,我也是必须处理从未执行的功能和未定义的功能等。)。
答案 0 :(得分:1)
我不确定您在寻找什么,但如果您正在寻找附加到该文件的方法,可以尝试
FileWriter fstream = new FileWriter("out.txt", true);
作为构造函数
public FileWriter(File file, boolean append)
会附加到给定的文件而不会覆盖它。
答案 1 :(得分:1)
是的,您可以更改代码以使用new FileWriter("out.txt", true)
。那会附加到文件中。但是,还有其他选择:
我强烈建议使用OutputStreamWriter
(包裹FileOutputStream
)代替FileWriter
。这样您就可以指定文件的编码。您希望它采用什么编码? (您仍然可以通过这种方式添加 - 您只需使用适当的FileOutputStream
构造函数。)
为什么使用BufferedWriter
?你正在给作家写一个字符串,然后关闭作者。你期望缓冲有什么影响?
目前,您正在吞下所有例外情况。即使你做想要默默地吞下IOException
,你也不应该吞下其他例外。始终抓住特定的例外情况。
如果抛出异常,则不是文件。您应始终使用finally
块关闭资源,或使用Java 7中的try-with-resources
语句。
每次写作时你真的需要重新打开文件吗?为什么不把它打开,只要你需要就写信给它?然后在应用程序关闭时关闭它。