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

在android中,我正在编写一个单击按钮的文件,并在下次单击时,它保存文件并关闭缓冲的编写器。 但是,我还希望实现在onDestroy函数中关闭缓冲编写器的function。 在此之前,我需要知道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 } 

如果它不是null,你可以根据需要多次关闭BufferedWriter 。 所以不需要特别检查BufferedWriter是否打开。

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

来自javadocs

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

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

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

请参阅此

此外,你可以这样检查

将以下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()); }