我看到了this example,我没有看到close()
上调用的InputStream
方法,那么prop.load()
会自动关闭流吗?或者示例中是否有错误?
答案 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
}