在我的代码中,尝试使用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");
在尝试“资源”方案时如何解决此问题?
答案 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并直接在调用函数中进行处理即可。