以下代码导致输入流程读取器未被关闭的误报。如果BufferedReader关闭,输入流读取器将自动关闭。我知道使用java 7+的资源尝试可以更优雅地解决这个问题,但这是android代码的一部分,所以我们坚持使用这个解决方案。顺便说一句。规则中的示例代码建议执行reader.close(不带try catch),因为它抛出IOException而无效。
BufferedReader reader = null;
try {
reader = new BufferedReader(new InputStreamReader(…));
// …
} catch (IOException e) {
// …
} finally {
try {
if (reader != null) {
reader.close();
}
} catch (IOException e) {
// …
}
}
答案 0 :(得分:0)
我想重点在于"新的InputStreamReader(...)"," ..."可能包含必须关闭的资源定义。 看https://www.securecoding.cert.org/confluence/display/java/FIO04-J.+Release+resources+when+they+are+no+longer+needed
答案 1 :(得分:0)
在你的情况下,我理解声纳警告,在我的情况下不是:
BufferedWriter csvFile = null;
FileOutputStream fos = null;
OutputStreamWriter os = null;
try {
fos = new FileOutputStream(fileName); // here false SONAR warning
os = new OutputStreamWriter(fos, "UTF-8");
csvFile = new BufferedWriter(os);
} finally {
if (csvFile != null) { //NOSONAR
csvFile.close();
}
if (os != null) { //NOSONAR
os.close();
}
if (fos != null) { //NOSONAR
fos.close();
}
}