java强化安全问题“未发布的资源流”
我在下面的代码中得到一个“未发布资源流”的强化查找
Resource[] l_objResource = resourceLoader.getResources(configErrorCode);
Properties l_objProperty = null;
for (int i = 0; i < l_objResource.length; i++) {
l_objProperty = new Properties();
l_objProperty.load(l_objResource[i].getInputStream());
}
BaseErrorParser.java
中的函数loadErrorCode()
有时无法释放由getInputStream();
分配的系统资源
有人能解释这个发现或帮助解决这个问题吗
根据以下评论,但上下文不清楚(JW):
ObjectInputStream l_objObjInputStream = null;
Map l_mapRet = null;
try {
l_objObjInputStream = new ObjectInputStream(new FileInputStream(p_objFilename));
Object l_objTemp = l_objObjInputStream.readObject();
l_mapRet = (Map) l_objTemp;
} finally {
if (l_objObjInputStream != null) {
l_objObjInputStream.close();
}
}
# 1 楼答案
您没有关闭由以下代码行打开的输入流
通常,如果有任何输入或输出流在使用后打开但未关闭,则fortify scanner会报告未释放的资源流问题。处理这些问题的理想方法是关闭finally block中所有打开的流,这样即使在异常情况下,它们也不会产生任何问题
您可以对代码进行try-finally阻塞,并关闭流,如下所示
请检查它是否适用于您的情况
# 2 楼答案
您可以使用这里的“试用资源”。这将自动关闭您的流