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

时间:2011-07-27 07:23:19

标签: 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());
    }
...

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

那我何时应该致电bw.close()? 我应该在某种init()中创建新的BufferedWriter吗? 我认为每次按下按钮时创建一个新的BufferedWriter都是低效的。

4 个答案:

答案 0 :(得分:6)

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

每按一次,请拨打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());
}

答案 1 :(得分:1)

this article中,您可以找到一种良好的编程风格:

  

简短的回答是你应该创建一个FileWriter实例,并将append标志设置为true,如下所示:

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

玩得开心

答案 2 :(得分:0)

如果你不打算再次使用它,你应该总是关闭缓冲的阅读器,这就是这里的情况。否则,您将离开GC以决定何时收集对象,并且资源将在那时处理。

所以简短的回答是:总是!

答案 3 :(得分:0)

你基本上自己回答了这个问题,它的全部目的是 IO缓冲。通常你打开它一次,可以在初始化或者第一次需要的时候,你在写完所有数据时刷新并关闭它。但请注意,除非您明确调用flush(),否则内容可能不是在您向其write()调用的时刻写入的,而是在以后输出时进行缓冲。