正确性 - 对先前取消引用的值进行空检查,尝试使用资源时出现 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 并直接在调用函数中处理。
在我的代码中,我在尝试使用资源时遇到 "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 并直接在调用函数中处理。