【问题标题】:Is there a way to tell if an input stream is opened and not closed anywhere in the code有没有办法判断输入流是否在代码中的任何位置打开而不是关闭
【发布时间】:2014-12-06 16:03:32
【问题描述】:

我使用 Java,我的 IDE 是 Intellij。 我遇到了无法删除已读取(打开)但未正确关闭的文件的生产问题,这仅仅是因为并非代码中的所有分支都导致了 fileInputStream.close()。

如果 intelij IDEA 有办法检查我的所有代码并判断是否有打开的 InputStreams(例如 FileInputStream)并且没有 close() 方法调用,我正在徘徊。

这将使我的错误修复得更好。

【问题讨论】:

  • 如果你的打开和关闭代码不在同一个方法中,就不可能遵循每条代码路径(可能有无数种组合)。作为一般规则,关闭 finally 块中的所有资源以避免这些类型的资源泄漏。

标签: java inputstream fileinputstream


【解决方案1】:

使用QAPlug-FindBugs插件,可以检测到未关闭的流:

您可以使用 IDEA 插件管理器安装插件。转到设置,然后搜索插件。然后从 JetBrains Plugin 安装 QAPlug 和 QAPlug-FindBugs。重新启动IDE并右键单击您的项目并选择分析代码。然后如果您有未关闭的流,它将报告。

见下图:

【讨论】:

  • 我们的代码中有一个未关闭的流,findbugs 没有找到。顺便说一句,我真的很喜欢 findbugs 并认为它是一个很棒的工具,但它确实错过了那个开放的流。
【解决方案2】:

升级到 java 7,其中 FileInputStreams 是可自动关闭的。

http://java.dzone.com/articles/java-7-new-feature-%E2%80%93

【讨论】:

  • 这需要更改代码。甚至可能是实质性的。这可能并不总是一种选择。
猜你喜欢
  • 2023-01-11
  • 1970-01-01
  • 2011-10-01
  • 1970-01-01
  • 2018-01-03
  • 1970-01-01
  • 1970-01-01
  • 2012-07-04
  • 1970-01-01
相关资源
最近更新 更多