如何在文本文件中最底部定义的行上写入BufferedWriter?

时间:2012-12-04 06:43:14

标签: java

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块中(同样,我也是必须处理从未执行的功能和未定义的功能等。)。

2 个答案:

答案 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语句。

  • 每次写作时你真的需要重新打开文件吗?为什么不把它打开,只要你需要就写信给它?然后在应用程序关闭时关闭它。