我跑的FindBugs检查我的代码,并抱怨说,方法可能会失败,关闭流:创建IO流对象
Properties prop = new Properties();
prop.load(new FileInputStream("file.txt"));
...
它是一个错误,或者只是假阳性?这个流会被正确关闭吗?
我跑的FindBugs检查我的代码,并抱怨说,方法可能会失败,关闭流:创建IO流对象
Properties prop = new Properties();
prop.load(new FileInputStream("file.txt"));
...
它是一个错误,或者只是假阳性?这个流会被正确关闭吗?
流处理是乏味的(在Java 7之前)。在此之前,您必须手动关闭流。
InputStream is = null;
try {
is = new FileInputStream(..);
// do something with stream
} finally {
try {
is.close();
} catch (Exception ex){
//report problem
}
}
阿帕奇百科全书琅可以通过其IOUtils.closeQuitely(is)
缩短finally
条款,但要注意,它隐藏了异常
FindBugs的是正确的,流将保持开放(至少直到节目结束或它是垃圾收集的)。由于API状态,流式传递给load()
方法未关闭。
请参见:http://download.oracle.com/javase/6/docs/api/java/util/Properties.html#load%28java.io.InputStream%29
...并在此该物流被关闭?也许只有垃圾收集...所以FindBugs是正确的。 – 2011-07-12 20:10:52
我同意它不是封闭的,但它的范围是有限的,所以我应该真的在意吗?代码看起来很干净 – Dima