正确性-对先前取消引用的值进行Nullcheck,尝试使用资源时出现FOD问题

时间:2019-12-20 10:07:22

标签: java fortify

在我的代码中,尝试使用Resource时,在输入流上出现“正确性-先前取消引用的值的Nullcheck”强化问题。

@Bean
public String publicKey() throws IOException {
    URL resourceUrl = getClass().getClassLoader().getResource("something.txt");
    try (InputStream inputStream = resourceUrl.openStream()) {
        **BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));**

该错误在Buffered Reader初始化行中引发。

资源URL来自:

URL resourceUrl = getClass().getClassLoader().getResource("something.txt");

在尝试“资源”方案时如何解决此问题?

1 个答案:

答案 0 :(得分:2)

我能够按以下方式解决(清理SonarQube报告)此问题:

方法1:尝试使用资源具有默认的空检查,因此,为避免出现冗余的取消引用的空检查问题,请将语句移出尝试使用资源。

URL resourceUrl = getClass().getClassLoader().getResource("something");

    final StringBuilder builder = new StringBuilder();
    try {
        InputStream inputStream = resourceUrl.openStream();
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
        try {
            bufferedReader.lines().forEach(builder::append);
        } finally {
            bufferedReader.close();
            inputStream.close();
        }
    } catch (IOException ex){ //rethrow the same and handle in the calling function }

注意:这种try.find嵌套的形式在try ... catch中特别有用,当finally块引发与其余代码相同的异常时(这在java.io操作中很常见)。

方法2:只需删除try块并使函数抛出IOException并直接在调用函数中进行处理即可。