对于下面的java代码,尽管resource在finally块中被关闭,但sonar正在报告:使用try-with-resources或在“finally”子句中关闭此“ObjectInputStream”。
FileInputStream fileInputStream = null;
ObjectInputStream objIn = null;
try {
fileInputStream = new FileInputStream(value);
objIn = new ObjectInputStream(fileInputStream)
}
finally {
try
{
if (fileInputStream != null) {
fileInputStream.close();
}
if (objIn != null) {
objIn.close();
}
} catch (IOException e) {}
}
当使用try-with-resources时,Sonar没有报告上述问题,因为我使用的java版本不支持try-with-resource,我不得不在finally块中关闭资源。
2条答案
按热度按时间m1m5dgzv1#
这不是假阳性。
如果
fileInputStream.close()
抛出异常,则不会调用objIn.close()
,也不会关闭ObjectInputStream
。您应该将两个
close
调用分开,以确保两个流都已关闭:nom7f22z2#
finally
是 * 在 *try
时,在现实中,它必须在外面。虽然我不确定SonarQube是否会理解你关闭了它。