【发布时间】:2011-02-25 08:49:48
【问题描述】:
有趣的情况。我有一段代码创建了几个 ZipOutputStreams。在我考虑写任何东西之前作为安全检查,我检查我的输出流是否已正确初始化:
ZipOutputStream countStream = null;
File countFile = null;
// other files
try {
countFile =
new File(savePath.getCanonicalPath() + savePath.separator + outputTag
+ "_COUNT_OUTPUTS.zip");
// other files
} catch (Exception e) {
outputLog.add("UNABLE TO FIND SAVE PATH");
return util.FILE_INVALID;
}
try {
// prepare outputs
if (countFile.exists() == true) {
countFile.delete();
} else {
}
countStream = new ZipOutputStream(new FileOutputStream(countFile));
// other files
} catch (Exception e) {
e.printStackTrace();
outputLog.add("UNABLE TO CREATE OUTPUT FILES");
return util.FILE_SAVE_FAIL;
}
if (countStream == null) {
outputLog.add("UNABLE TO CREATE OUTPUT FILES");
return util.FILE_SAVE_FAIL;
} else {
}
我没有特别看出这段代码的问题出在哪里,但它会在 null 测试中引发警告:“Null 比较总是产生 false:变量 countStream 在这个位置不能为 null”。据我所见,我将一个变量初始化为 null,然后尝试创建输出流,但不能保证会发生。忽略警告很容易,但我更想知道编译器是如何得出保证成功创建 countStream 的结论
K.巴拉德
【问题讨论】:
-
如果 countstream 不为 null,它将返回 false。这有什么问题?
-
您的错误消息指的是 timeStream 而不是 countStream。这是复制粘贴错误吗?
-
顺便说一句,您应该在 try catch 中添加一个 finally 块,以将 ZipOutputStream 关闭以关闭它(调用 close() 方法)。
-
顺便说一句:
if (countFile.exists() == true)中的== true部分是多余的 -
@Richard:很好,是的,我有几个拉链,都带有相同的警告。
标签: java zip warnings outputstream