我需要同时关闭FileReader和BufferedReader吗?

我正在使用包裹在FileReader周围的BufferedReader读取本地文件:


BufferedReader reader = new BufferedReader(new FileReader(fileName));

// read the file

// (error handling snipped)

reader.close();

我需要close()的FileReader为好,或将包装处理这个问题?我看过代码,人们在其中执行以下操作:


FileReader fReader = new FileReader(fileName);

BufferedReader bReader = new BufferedReader(fReader);

// read the file

// (error handling snipped)

bReader.close();

fReader.close();

从Servlet调用此方法,并且我想确保我没有打开任何句柄。


慕侠2389804
浏览 1618回答 3
3回答

胡说叔叔

没有。BufferedReader.close()根据javadoc为BufferedReader和InputStreamReader 关闭流以及FileReader.close()做。

慕的地10843

正如其他人指出的那样,您只需要关闭外包装即可。BufferedReader reader = new BufferedReader(new FileReader(fileName));如果BufferedReader构造函数抛出异常(例如OutOfMemoryError),则很有可能泄漏文件句柄。如果您的应用处于这种状态,则清理的谨慎程度可能取决于您不剥夺操作系统可能要分配给其他程序的资源的重要性。所述可关闭的,如果一个封装构造是可能在Java 5或6失败界面可用于:Reader reader = new FileReader(fileName);Closeable resource = reader;try {  BufferedReader buffered = new BufferedReader(reader);  resource = buffered;  // TODO: input} finally {  resource.close();}Java 7代码应使用try-with-resources模式:try (Reader reader = new FileReader(fileName);    BufferedReader buffered = new BufferedReader(reader)) {  // TODO: input}

弑天下

检查源代码后,我发现该示例:FileReader fReader = new FileReader(fileName);BufferedReader bReader = new BufferedReader(fReader);BufferedReader对象上的close()方法将调用Reader类的抽象close()方法,该类最终将在InputStreamReader类中调用已实现的方法,然后关闭InputStream对象。因此,仅bReader.close()就足够了。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java