我该如何检查BufferedWriter是否已经关闭?

时间:2016-03-30 06:32:12

标签: java android file-handling bufferedwriter

在android中,我正在编写一个单击按钮的文件,并在下次单击时,它会保存文件并关闭缓冲的编写器。但是,我还希望实现在onDestroy函数中关闭缓冲编写器的功能。在此之前,我需要知道Bufferedwriter是否已经关闭。我如何检查Buffered Writer是否已经关闭?

除此之外,bufferedWriter.close()功能设置为bufferedWriternull吗?

4 个答案:

答案 0 :(得分:5)

在已关闭的Writer上调用close方法没有任何影响。

但是,如果你想知道作家是否已关闭,你可以调用writer.flush(),如果它抛出IOException则意味着作家已经关闭。

对于第二个问题,关闭流不会使引用无效。您必须将其明确设置为null

答案 1 :(得分:0)

您可以检查bufferredWriter是否不等于null

if(bufferredWriter!=null)
{
bufferredWriter.close();
}

如果您使用的是java7或更多版本,则无需担心关闭BufferredWriter

从JDK 7开始,您可以尝试使用资源

例如

try(BufferredWriter bufferedWriter=new BufferredWriter())
{

//your code
}
catch(Exception e)
{
}

答案 2 :(得分:0)

    BufferedWriter vf = new BufferedWriter(new FileWriter("file"));

    if (vf != null)
    {
        vf.close();
        vf.close(); //won't cause any problem
    }

如果它不为空,您可以根据需要多次关闭BufferedWriter。因此,无需特别检查BufferedWriter是否开放。

如果在IOException发生的情况下在try / catch中包含close语句,那就更好了。

来自javadocs

  

关闭流,先冲洗它。关闭流后,进一步的write()或flush()调用将导致抛出IOException。关闭先前关闭的流无效。

正如sidgate所解释的那样,关闭流不会使您必须手动分配的引用无效。

答案 3 :(得分:0)

bufferedWriter.close() - 关闭这个作家。刷新缓冲区的内容,关闭目标编写器,释放缓冲区。只有第一次关闭调用才有效。

参考this

此外,您可以像这样检查

将以下2个变量定义为实例变量

BufferedWriter bufferWriter;
boolean isOpen = false;

然后,

try {
    if (!isOpen) {
        bufferWriter = new BufferedWriter(new FileWriter(file, true));
        bufferWriter.write(initialData);
        isOpen = true;
    }
    bufferWriter.write(remainingData);
    bufferWriter.flush();
    Log.d(TAG, "written to file:" + file.getAbsolutePath());
} catch (IOException e) {
    Log.v("IOException", e.toString());
}