2012-12-04 34 views
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){ 
    } 
} 

我在运行时调用了这个方法几十万次,但它一直覆盖第一行。我怎样才能让它从最底层开始? (我照顾下一行正在使用转义序列定义。)如何让BufferedWriter在文本文件的最底部定义的行上写入?

或者是否有更优雅的解决方案?打开和关闭一个文本文件几十万次来存储我的模拟结果并不是非常有效。但是如果我在所有执行结束时关闭了main.close,我就会与很多人说,与I/O有关的所有事情都应该放在try/catch块中(另外,我会必须处理永不执行的功能和不被定义的功能等)。

回答

1

是的,你可以改变你的代码使用new FileWriter("out.txt", true)。这将附加到该文件。不过,也有其他选择:

  • 我倒是强烈使用OutputStreamWriter(一FileOutputStream缠)建议,而不是FileWriter。这样你可以为你的文件指定编码。你想要什么编码? (您仍然可以采用这种方式 - 您只需使用合适的FileOutputStream构造函数。)

  • 为什么使用BufferedWriter?你正在给作者写一个字符串,然后关闭作者。你期望缓冲有什么效果?

  • 目前您正在吞咽所有例外情况。即使你想要默默吞下IOException,你不应该吞咽其他例外。在可以的地方总是要捕捉特定的例外

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

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

+0

关于你提到的第二点:老实说,我只是用Google搜索一个代码块的文件出来,不知道是什么替代的BufferedWriter有什么他们之间的折衷方案。 –

+0

@WuschelbeutelKartoffelhuhn:只要直接使用'OutputStreamWriter',除非你需要缓冲。查看“BufferedWriter”的文档,看看它的目的是什么。 –

+0

好的,谢谢,我会用write()命中OutputStreamWriter对象, –

1

我不知道你在找什么,但如果你正在寻找一种方式来追加到文件,你可以尝试

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

的构造

public FileWriter(File file, boolean append) 

将追加给予的文件,而不是覆盖它。

相关问题