2011-07-12 101 views
1

我跑的FindBugs检查我的代码,并抱怨说,方法可能会失败,关闭流:创建IO流对象

Properties prop = new Properties(); 
prop.load(new FileInputStream("file.txt")); 
... 

它是一个错误,或者只是假阳性?这个流会被正确关闭吗?

+0

...并在此该物流被关闭?也许只有垃圾收集...所以FindBugs是正确的。 – 2011-07-12 20:10:52

+0

我同意它不是封闭的,但它的范围是有限的,所以我应该真的在意吗?代码看起来很干净 – Dima

回答

4

流处理是乏味的(在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条款,但要注意,它隐藏了异常