【问题标题】:SONAR issue - Close this FileInputStreamSONAR 问题 - 关闭此 FileInputStream
【发布时间】:2017-01-31 23:03:35
【问题描述】:

如何解决此 SONAR 问题? 关闭这个 FileInputStream。

提前致谢!

File billFile = new File(filePath);
try (BufferedReader br = new BufferedReader(new InputStreamReader(
        new FileInputStream(billFile), DEFAULTCHARSET));) { 

    ... 
    br.close();
} catch (FileNotFoundException e) {
    LOG.error(e.getMessage());              
} catch (IOException e) {
    LOG.error(e.getMessage(), e);               
}

【问题讨论】:

    标签: java sonarqube


    【解决方案1】:

    当您使用try-with-resources 语句时,您无需再显式关闭您的BufferedReader,因此只需从您当前的代码中删除br.close();,这应该足以解决您的声纳问题,因为BufferedReader 将在关闭时关闭底层InputStreamReaderInputStreamReader 将在关闭时关闭您的FileInputStream


    如果还不够,您可以简单地重写您的代码,将您的 FileInputStream 明确声明为您的 try-with-resources 语句的资源,如下所示:

    try (FileInputStream fis = new FileInputStream(billFile);
         Reader reader = new InputStreamReader(fis, DEFAULTCHARSET);
         BufferedReader br = new BufferedReader(reader) {
         ...
    

    如果仍然无法正常工作,请确保为 Java 7 及更高版本正确配置了声纳,否则它不会意识到可能导致此违规的 try-with-resources 语句提高。

    【讨论】:

    • 谢谢。我在代码的另一部分有这个问题,如下所示。这是完整的功能,其中没有 br.close() 。 try (BufferedReader br = new BufferedReader(new InputStreamReader( new FileInputStream(tmpFile), DEFAULTCHARSET));) { String eachLine; while ((eachLine = br.readLine()) != null) { ctr = eachLine; } } catch (FileNotFoundException e) { LOG.error(e); } catch (UnsupportedEncodingException e1) { LOG.error(e1); } catch (IOException e) { LOG.error(e); }
    • 我认为是的,如果不将其定义为响应更新中建议的资源
    【解决方案2】:

    您可能使用的是过时的 SONAR 版本或规则集。检查版本。 (try-with-resources 是在 Java 7 中引入的)

    【讨论】:

    • 我们使用的是 SONAR v5.6.3。我们在几个文件中遇到了这个问题,我们用try-with-resources 解决了,除了这些之外,它们都消失了。
    猜你喜欢
    • 2017-02-06
    • 1970-01-01
    • 2010-09-14
    • 1970-01-01
    • 1970-01-01
    • 2012-12-12
    • 2011-07-02
    • 2012-04-09
    • 2017-10-19
    相关资源
    最近更新 更多