Java 我应该什么时候关闭BufferedWriter?

Java 我应该什么时候关闭BufferedWriter?,java,android,bufferedwriter,Java,Android,Bufferedwriter,每次按下按钮时,我都会在文本文件中添加一行。目前,每次按下按钮时,我都会这样做: ... try { BufferedWriter bw = new BufferedWriter(new FileWriter(f, true)); if (fileIsNew == true) bw.write(firstLine); bw.write(string); bw.close(); Log.v("f

每次按下按钮时,我都会在文本文件中添加一行。目前,每次按下按钮时,我都会这样做:

...
try {
        BufferedWriter bw = new BufferedWriter(new FileWriter(f, true));
        if (fileIsNew == true)
            bw.write(firstLine);
        bw.write(string);
        bw.close();
        Log.v("file", "written to file:" + f.getAbsolutePath());
    } catch (IOException e) {
        Log.v("IOException", e.toString());
    }
...
我认为在每行之后关闭bufferedwriter并不是一个好主意,因为bufferedwriter的目的是缓冲输出,对吗

那么我应该什么时候调用
bw.close()
? 我是否应该在某种
init()
中创建新的BufferedWriter?
我认为每次按下按钮时都创建一个新的BufferedWriter是低效的。

如果不打算再次使用缓冲读卡器,则应始终关闭该读卡器,这里就是这种情况。否则,将由GC决定何时收集对象,此时将释放资源


所以简单的回答是:永远

您可以将其声明为成员字段,通过设置标志在第一次按下按钮时创建,并保持其打开状态

每次按下时,先调用
write()
,然后调用
flush()
(以避免内容丢失)


你基本上是自己回答了这个问题,它的全部目的是IO缓冲。通常,您会打开它一次,可以在init中打开,也可以在第一次需要它时,在完成所有数据的写入后刷新并关闭它。但是,请注意,除非显式调用
flush()
,否则内容可能不会在调用
write()
时写入,而是缓冲以供以后输出。

在一个好的编程风格中,您可以发现:

简而言之,您应该创建一个
FileWriter
实例,并将append标志设置为true,如下所示:

BufferedWriter bw = new BufferedWriter(new FileWriter("checkbook.dat", true));

玩得开心

问题是,我如何知道用户何时完成了所有数据的编写?我不想实现“完成”按钮,数据应该就在那里。比如说,每10行左右我就可以叫它一次吗?嗯,那真的取决于你在写什么。。。如果这是一种文本编辑功能,我可能会在用户退出应用程序时刷新并关闭它…
@Override public void onPause(){output.closeBufferedWriter();}
这样行吗?不知道,我对droids不是特别熟悉,如果用户在onPause触发后一段时间内不输入任何数据,当然……谢谢,非常有用的资源。:)我已经编辑了你的答案,所以它引用了参考文章的主要观点。仅链接的答案不太有用,因为链接可能会断开。
BufferedWriter bw = new BufferedWriter(new FileWriter("checkbook.dat", true));