Properties.load会关闭InputStream吗?

7

我看到了这个例子,并没有看到close()方法被调用于InputStream上,那么prop.load()会自动关闭流吗?还是例子中有错误?


2
我刚刚检查了load(stream)的Java代码,它没有关闭流。 - Lyju I Edwinson
2
示例中存在错误。Properties.load()没有关闭流,你需要手动关闭。整个示例的质量非常差,甚至在某些操作系统上都无法正常工作。不要依赖任意的互联网垃圾,请使用Oracle Java教程。 - user207421
3个回答

8
流在 Properties.load() 后没有关闭。
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

4
为什么你要问当 Properties.load(InputStream inStream) 的javadoc说:

该方法返回后,指定的流保持打开状态

这个已经自Java 6开始就一直如此了。
正如EJP在评论中所说:不要依赖于任意的互联网垃圾信息。 使用官方的Oracle Java文档作为您的主要信息来源。

1
以下的 try-with-resources 会自动关闭 InputStream(如果需要,您可以添加 catchfinally):
try (InputStream is = new FileInputStream("properties.txt")) {
    // is will be closed automatically
}

在try块中声明的任何资源都将被关闭。 因此,这个新构造可以避免你必须配对try块与专门用于正确资源管理的finally块。
Oracle的文章请看:http://www.oracle.com/technetwork/articles/java/trywithresources-401775.html

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接