在我的代码中,我在尝试使用资源时在输入流上遇到“正确性 - 先前取消引用的值的 Nullcheck”Fortify 问题。
@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));**
错误在缓冲读取器初始化行中抛出。
资源 URL 取自:
URL resourceUrl = getClass().getClassLoader().getResource("something.txt");
如何在尝试资源场景时解决这个问题?
最佳答案
我能够修复(干净的 SonarQube 报告)此问题,如下所示:
方法 1:try with resource 有默认的 null 检查,因此为了避免冗余的取消引用 null 检查问题,将语句移出 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 }
注意:当finally block 抛出与代码其余部分相同的异常时(这在java.io操作中很常见),这种在try...catch中嵌套try...finally的风格特别有用。
方法二:简单地去掉try block ,让函数抛出IOException并直接在调用函数中处理。
关于java - 正确性 - 对先前取消引用的值进行 Nullcheck,尝试使用资源时出现 FOD 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59423396/