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

How should I check if BufferedWriter is already closed?

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

除此之外,bufferedWriter.close() 函数是否将 bufferedWriter 设置为 null

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

不过,如果您想知道 Writer 是否已关闭,您可以调用 writer.flush(),如果它抛出 IOException,则表示 Writer 已经关闭。

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

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

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

如果您正在使用 java7 或更多,则无需担心关闭 BufferredWriter

JDK 7以后可以让你尝试资源

例如

try(BufferredWriter bufferedWriter=new BufferredWriter())
{

//your code
}
catch(Exception e)
{
}
    BufferedWriter vf = new BufferedWriter(new FileWriter("file"));

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

如果 BufferedWriter 不为空,您可以关闭任意多次。所以不需要专门检查BufferedWriter是否打开。

如果在 try/catch 中包含 close 语句会更好,以防发生 IOException。

来自 javadocs

Closes the stream, flushing it first. Once the stream has been closed, further write() or flush() invocations will cause an IOException to be thrown. Closing a previously closed stream has no effect.

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

bufferedWriter.close() - 关闭此编写器。刷新缓冲区的内容,关闭目标编写器,并释放缓冲区。只有第一次调用 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());
}