【发布时间】:2011-04-28 20:10:51
【问题描述】:
我对使用 Java InputStreams 时 close() 方法的用法有一些疑问。根据我从大多数开发人员那里看到和读到的内容,您应该始终在不再需要时显式调用 InputStream 上的 close()。但是,今天我正在研究使用 Java 属性文件,我发现的每个示例都有这样的内容:
Properties props = new Properties();
try {
props.load(new FileInputStream("message.properties"));
//omitted.
} catch (Exception ex) {}
对于上面的例子,没有办法显式调用 close() 因为 InputStream 在使用后是不可访问的。尽管 InputStreams 似乎与大多数人所说的显式关闭相矛盾,但我已经看到了许多类似的 InputStreams 用法。我通读了 Oracle 的 JavaDocs,它没有提到 Properties.load() 方法是否关闭了 InputStream。我想知道这是否通常可以接受,或者是否更愿意做类似以下的事情:
Properties props = new Properties();
InputStream fis = new FileInputStream("message.properties");
try {
props.load(fis);
//omitted.
} catch (Exception ex) {
//omitted.
} finally {
try {
fis.close();
} catch (IOException ioex) {
//omitted.
}
}
哪种方式更好和/或更有效?还是真的很重要?
【问题讨论】:
-
感谢大家提供的答案。我希望我能接受它们作为答案。现在这对我来说很有意义。
标签: java inputstream