【问题标题】:Is a file opened with newBufferedReader closed if an Exception occurs?如果发生异常,是否关闭了使用 newBufferedReader 打开的文件?
【发布时间】:2016-05-03 15:00:31
【问题描述】:

我通常通过获取 BufferedReader 来打开文件:

Files.newBufferedReader(myPath).lines()
    .doStuff()
    .doMoreStuff();

当方法抛出异常时会发生什么,Reader 是否会像 try-with-resource 一样自动关闭?我在文档中找不到参考。

【问题讨论】:

  • 不,我不这么认为。这就是为什么它建议使用 try-with-resource 或至少 try-cacth-finally 构造。
  • 我只是看不到使用工厂方法而不是简单地创建一个新的BufferedReader的好处。我认为这样会更简洁,但是必须用异常处理来包装它,这与标准初始化没有什么不同。

标签: java file exception memory-leaks bufferedreader


【解决方案1】:

Files.newBufferedReader 只是为文件创建BufferedReader 的实用程序/工厂方法。在内部,它最终会执行 new BufferedReader() 来创建 BufferedReader。

因此,您必须像使用 new 运算符创建 BufferedReader 一样对待它。如果您希望它在 try 块结束时自动关闭,则必须像使用 new 运算符创建它一样使用 try-with-resource

【讨论】:

  • 嗯,我明白了,但是我猜在这种情况下,try-with-resource 看起来真的很难看,因为它是一个流,我必须将整个流包含在 try-with-clause 中?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-08
  • 2014-02-27
  • 1970-01-01
  • 1970-01-01
  • 2012-06-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多