在android中,我正在编写一个单击按钮的文件,并在下次单击时,它会保存文件并关闭缓冲的编写器。但是,我还希望实现在onDestroy函数中关闭缓冲编写器的功能。在此之前,我需要知道Bufferedwriter
是否已经关闭。我如何检查Buffered Writer是否已经关闭?
除此之外,bufferedWriter.close()
功能设置为bufferedWriter
到null
吗?
答案 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());
}