我该如何检查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()); }