我什么时候应该关闭()一个BufferedWriter?

int*_*gli 2 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("file", "written to file:" + f.getAbsolutePath());
    } catch (IOException e) {
        Log.v("IOException", e.toString());
    }
...
Run Code Online (Sandbox Code Playgroud)

因为bufferedWriter的目的是缓冲输出,所以我认为在每一行之后关闭bufferedwriter并不是一个好主意,对吗?

那我该bw.close()什么时候打电话?我应该在某种形式下创建新的BufferedWriter init()吗?我认为每次按下按钮时创建一个新的BufferedWriter效率很低.

MBy*_*ByD 7

您可以将其声明为成员字段,首先按下按钮,通过设置标志创建它,并保持打开状态.

每次按下,write()然后打电话flush()(以避免内容丢失).

BufferedWriter bw;
boolean isOpen = false;
// ..
try {
    if (!isOpen) {
        bw = new BufferedWriter(new FileWriter(logFile, true));
        bw.write(firstLine);
        isOpen = true;
    }
    bw.write(string);
    bw.flush();
    Log.v("file", "written to file:" + logFile.getAbsolutePath());
} catch (IOException e) {
    Log.v("IOException", e.toString());
}
Run Code Online (Sandbox Code Playgroud)