Properties.load会关闭InputStream吗?

时间:2016-10-17 03:36:35

标签: java properties inputstream java-io

我看到了this example,我没有看到close()上调用的InputStream方法,那么prop.load()会自动关闭流吗?或者示例中是否有错误?

3 个答案:

答案 0 :(得分:4)

在Properties.load()

之后,Stream未关闭
public static void main(String[] args) throws IOException {

    InputStream in = new FileInputStream(new File("abc.properties"));

    new Properties().load(in);

    System.out.println(in.read());
}

上面的代码返回“-1”,因此流不会关闭。否则它应该抛出java.io.IOException: Stream Closed

答案 1 :(得分:2)

为什么要问Properties.load(InputStream inStream)的javadoc何时这样说?

  

此方法返回后,指定的流保持打开

自从Java 6以来一直在说。

正如EJP在comment中所说:不要依赖任意互联网垃圾。使用官方Oracle Java文档作为主要信息来源。

答案 2 :(得分:0)

如果您使用的是Java 7或更高版本,则可以使用 try-with-resources 。 Oracle在这里的文章:http://www.oracle.com/technetwork/articles/java/trywithresources-401775.html

  

在try块打开内声明的任何资源都将关闭。因此,新的构造使您不必将try块与专用于适当资源管理的相应finally块配对。

以下内容将自动关闭InputStream(如果需要,可以添加 catch finally ):

try (InputStream is = new FileInputStream("properties.txt")) {
    // is will be closed automatically
}