声纳java 3.9假阳性资源未关闭(鱿鱼:S2095)

时间:2016-01-19 10:09:35

标签: sonarqube

以下代码导致输入流程读取器未被关闭的误报。如果BufferedReader关闭,输入流读取器将自动关闭。我知道使用java 7+的资源尝试可以更优雅地解决这个问题,但这是android代码的一部分,所以我们坚持使用这个解决方案。顺便说一句。规则中的示例代码建议执行reader.close(不带try catch),因为它抛出IOException而无效。

    BufferedReader reader = null;
    try {
        reader = new BufferedReader(new InputStreamReader(…));
        // …
    } catch (IOException e) {
        // …
    } finally {
        try {
            if (reader != null) {
                reader.close();
            }
        } catch (IOException e) {
            // …
        }
    }

2 个答案:

答案 0 :(得分:0)

我想重点在于"新的InputStreamReader(...)"," ..."可能包含必须关闭的资源定义。 看https://www.securecoding.cert.org/confluence/display/java/FIO04-J.+Release+resources+when+they+are+no+longer+needed

答案 1 :(得分:0)

在你的情况下,我理解声纳警告,在我的情况下不是:

 BufferedWriter csvFile = null;
 FileOutputStream fos = null;
 OutputStreamWriter os = null;
 try {
            fos = new FileOutputStream(fileName); // here false SONAR warning
            os = new OutputStreamWriter(fos, "UTF-8");
            csvFile = new BufferedWriter(os);
 } finally {
            if (csvFile != null) { //NOSONAR
                csvFile.close();
            }

            if (os != null) { //NOSONAR
                os.close();
            }

            if (fos != null) { //NOSONAR
                fos.close();
            }

     }