0
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 中有 out.close,我会与很多人发生冲突,他们说与 I/O 相关的所有内容都应该放在 try/catch 块中(另外,我会必须处理函数永远不会被执行并且没有被定义等)。

4

2 回答 2

1

我不确定您在寻找什么,但如果您正在寻找一种附加到文件的方法,您可以尝试

FileWriter fstream = new FileWriter("out.txt", true);

作为构造函数

public FileWriter(File file, boolean append)

将附加到给定的文件而不覆盖它。

于 2012-12-04T06:54:39.277 回答
1

是的,您可以将代码更改为使用new FileWriter("out.txt", true). 那将附加到文件中。但是,还有其他选择:

  • 强烈建议使用OutputStreamWriter(环绕 a FileOutputStream) 而不是FileWriter. 这样您就可以指定文件的编码。你希望它是什么编码?(您仍然可以通过这种方式追加 - 您只需使用适当的FileOutputStream构造函数。)

  • 你为什么用一个BufferedWriter?您正在向作家写一个字符串,然后关闭作家。您希望缓冲产生什么影响?

  • 目前你正在吞下所有的例外。即使您确实想默默地吞下IOException,也不应该吞下其他异常。始终尽可能捕获特定异常。

  • 如果抛出异常,您就不是文件。您应该始终使用块关闭资源finally,或使用try-with-resourcesJava 7 中的语句。

  • 真的每次写的时候都需要重新打开文件吗?为什么不让它保持打开状态,并在需要时写信给它?然后在应用程序关闭时关闭它。

于 2012-12-04T07:04:57.463 回答