我正在使用一个BufferedReader包装FileReader读取一个本地文件:

BufferedReader reader = new BufferedReader(new FileReader(fileName));
// read the file
// (error handling snipped)
reader.close();

我是否需要关闭()FileReader,或者包装器将处理它? 我曾见过这样的代码:

FileReader fReader = new FileReader(fileName);
BufferedReader bReader = new BufferedReader(fReader);
// read the file
// (error handling snipped)
bReader.close();
fReader.close();

这个方法是从servlet调用的,我希望确保没有留下任何句柄。


当前回答

BufferedReader的源代码显示,当您关闭BufferedReader时,底层是关闭的。

其他回答

BufferedReader的源代码显示,当您关闭BufferedReader时,底层是关闭的。

在检查源代码后,我发现对于这个例子:

FileReader fReader = new FileReader(fileName);
BufferedReader bReader = new BufferedReader(fReader);

BufferedReader对象上的close()方法将调用Reader类的抽象close()方法,该方法最终将调用InputStreamReader类中实现的方法,然后关闭InputStream对象。

因此,只有bread .close()是足够的。

你只需要关闭bufferedReader,即reader.close(),它就会工作得很好。

no.

BufferedReader.close()

根据javadoc关闭BufferedReader和InputStreamReader的流

还有

FileReader.close()

所做的事。

根据BufferedReader源代码,在这种情况下,bReader。近距离呼叫fReader。关闭,从技术上讲,您不必调用后者。