【问题标题】:how to properly close resource streams in case of exceptions发生异常时如何正确关闭资源流
【发布时间】:2017-08-29 16:10:17
【问题描述】:

fortify 抱怨以下代码:

protected void doStuff() throws Exception{
    try (CSVReader csvReader = new CSVReader(new FileReader(file))) {
        ...
        String[] read;
        read = csvReader.readNext();
        ...
    }
}

在 FileReader 抛出异常的情况下。我是 java 新手,我不清楚为什么 try with resources 块不能处理这种情况。如何处理?

【问题讨论】:

  • 确实如此。 Fortify 是错误的(除非 CSVReader 在关闭时没有关闭它包装的阅读器,这会令人惊讶)。
  • @JBNizet 或者在CSVReader的构造过程中抛出异常。
  • fortify 可能太老了,无法理解尝试资源 - 不熟悉。 Java-6 中的这种构造将是失败的。
  • 抱怨是什么意思?如果您遇到语法错误,那么您的编译器可能与 Java SE 1.7 不兼容。
  • 是的。看到这个答案:stackoverflow.com/a/21348893/638028

标签: java exception-handling


【解决方案1】:

最好先关闭较低级别的读取器实例,然后再关闭包装器级别的实例以避免内存泄漏。

所以先关闭 fileReader 的实例,然后再关闭 CSVReader。

FileReader fileReader= new FileReader(file)
CSVReader csvReader = new CSVReader(fileReader)


....
...
fileReader.close();
csvReader.close();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-12
    • 1970-01-01
    • 1970-01-01
    • 2020-03-21
    • 2019-04-22
    • 1970-01-01
    • 2012-07-06
    • 2015-03-15
    相关资源
    最近更新 更多