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

Correctness - Nullcheck of value previously dereferenced, FOD issue in try with resource

在我的代码中,我在尝试使用资源时遇到 "Correctness - Nullcheck of value previously dereferenced" 强化输入流问题。

@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");

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

我能够按如下方式修复(清理 SonarQube 报告)此问题:

方法 1:try with resource 具有默认的空检查,因此要避免冗余的取消引用空检查问题,请将语句从 try with resource 中移出。

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...catch 中嵌套 try...finally 的样式在 finally 块抛出与其余代码相同的异常时特别有用(这在 java.io 操作中很常见.)

方法 2:简单地删除 try 块并使函数抛出 IOException 并直接在调用函数中处理。