Sonar violation: quot;Method may fail to close stream on exceptionquot;(声纳违规:“方法可能无法在异常时关闭流)
问题描述
我有这个方法:
private void unZipElementsTo(String inputZipFileName, String destPath) throws FileNotFoundException, IOException {
OutputStream out = null;
InputStream in = null;
ZipFile zf = null;
try {
zf = new ZipFile(inputZipFileName);
for (Enumeration<? extends ZipEntry> em = zf.entries(); em.hasMoreElements();) {
ZipEntry entry = em.nextElement();
String targetFile = destPath + FILE_SEPARATOR + entry.toString().replace("/", FILE_SEPARATOR);
File temp = new File(targetFile);
if (!temp.getParentFile().exists()) {
temp.getParentFile().mkdirs();
}
in = zf.getInputStream(entry);
out = new FileOutputStream(targetFile);
byte[] buf = new byte[4096];
int len;
while ((len = in.read(buf)) > 0) {
out.write(buf, 0, len);
}
out.flush();
out.close();
in.close();
}
}
finally
{
if (out!=null) out.close();
if (zf!=null) zf.close();
if (in!=null) in.close();
}
}
对于这个方法,Sonar 给我这个违规:
For this method Sonar give me this Violation:
不好的做法 - 方法可能无法在异常时关闭流unZipElementsTo(String, String) 可能无法在异常时关闭流
Bad practice - Method may fail to close stream on exception unZipElementsTo(String, String) may fail to close stream on exception
但是,我没有看到任何违规行为.也许,它只是一个假阳性?
But, I don't see any violations there. Maybe, it is just a False-positive ?
推荐答案
没错.OutputStream.close()
方法本身可以抛出异常.如果发生这种情况,例如在 finally{}
块的第一行,其他流将保持打开状态.
That's right.
The OutputStream.close()
method can itself throw an exception.
If this happens, e.g. on the 1st line of your finally{}
block, then the other streams will be left open.
这篇关于声纳违规:“方法可能无法在异常时关闭流"的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:声纳违规:“方法可能无法在异常时关闭流"
基础教程推荐
- 无法使用修饰符“public final"访问 java.util.Ha 2022-01-01
- 减少 JVM 暂停时间 >1 秒使用 UseConcMarkSweepGC 2022-01-01
- 如何使用 Java 创建 X509 证书? 2022-01-01
- 在 Libgdx 中处理屏幕的正确方法 2022-01-01
- 设置 bean 时出现 Nullpointerexception 2022-01-01
- 降序排序:Java Map 2022-01-01
- Java Keytool 导入证书后出错,"keytool error: java.io.FileNotFoundException &拒绝访问" 2022-01-01
- “未找到匹配项"使用 matcher 的 group 方法时 2022-01-01
- Java:带有char数组的println给出乱码 2022-01-01
- FirebaseListAdapter 不推送聊天应用程序的单个项目 - Firebase-Ui 3.1 2022-01-01