繁体   English   中英

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

[英]How can I make a BufferedWriter write on the bottommost defined line in a text file?

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

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

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

作为构造函数

public FileWriter(File file, boolean append)

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

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

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

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

  • 目前,您正吞下所有异常。 即使您确实希望以静默方式吞下IOException ,也不应该吞下其他异常。 始终抓住特定的例外情况。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM