为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕侠2389804 2019-10-17 10:03:59
我正在使用包裹在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调用此方法,并且我想确保我没有打开任何句柄。
查看完整描述

3 回答

?
胡说叔叔

TA贡献1804条经验 获得超8个赞

没有。


BufferedReader.close()

根据javadoc为BufferedReader和InputStreamReader 关闭流


以及


FileReader.close()

做。


查看完整回答
反对 回复 2019-10-17
?
慕的地10843

TA贡献1785条经验 获得超8个赞

正如其他人指出的那样,您只需要关闭外包装即可。


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

}


查看完整回答
反对 回复 2019-10-17
?
弑天下

TA贡献1818条经验 获得超8个赞

检查源代码后,我发现该示例:


FileReader fReader = new FileReader(fileName);

BufferedReader bReader = new BufferedReader(fReader);

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


因此,仅bReader.close()就足够了。


查看完整回答
反对 回复 2019-10-17
  • 3 回答
  • 0 关注
  • 1617 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信