Java 我应该按照什么顺序关闭bufferedwriter和filewriter?
我知道BufferedWriter.close会自动关闭底层filewriter源。但出于某种原因,我被赋予了一项任务,这项任务要求同时完成这两项任务。到目前为止,我一直是按这个顺序做的 filewriter.close() bufferwriter.close() 我觉得这个命令是正确的。但另一方面, bufferedwriter.close() filewriter.close() 在这里,它不会抛出一个空指针,因为filewriter已经关闭了吗?正确的顺序是什么?这同样适用于bufferedreader和filereader吗Java 我应该按照什么顺序关闭bufferedwriter和filewriter?,java,Java,我知道BufferedWriter.close会自动关闭底层filewriter源。但出于某种原因,我被赋予了一项任务,这项任务要求同时完成这两项任务。到目前为止,我一直是按这个顺序做的 filewriter.close() bufferwriter.close() 我觉得这个命令是正确的。但另一方面, bufferedwriter.close() filewriter.close() 在这里,它不会抛出一个空指针,因为filewriter已经关闭了吗?正确的顺序是什么?这同样适用于buffer
bufferedwriter.close();
filewriter.close();
这不会引发空指针异常。您可能认为这是因为BufferedWriter
的close()
方法将Writer
字段设置为null
,但由于Java按值传递对象引用,原始FileWriter
仍然不是null
。关闭它不会有任何效果
这是BufferedWriter#close()
的实现:
从
OutputStreamWriter.close()
文件编写器继承的文档
关闭流,首先冲洗流。一旦关闭流,进一步的write()或flush()调用将导致抛出IOException。关闭以前关闭的流没有效果
因此,您应该可以很好地关闭已由BufferedWriter
关闭的FileWriter
更多信息:我之所以问这个问题并不是重复的,仅仅是因为我仔细研究了现有的解决方案,没有找到令人满意的答案。我想bufferedreader和filereader也是如此?也只是出于好奇,如果我先关闭filewriter.close(),然后关闭bufferdwriter.close(),会发生什么;它不会有同样的效果吗?@happyHelper同样适用于
BufferedReader
。至于订购差异,我建议您检查一下。
public void close() throws IOException {
synchronized (lock) {
if (out == null) {
return;
}
try {
flushBuffer();
} finally {
out.close(); // this closes the FileWriter
out = null; // the original FileWriter passed to the BufferedWriter is still not null after this call
cb = null;
}
}
}