【发布时间】:2012-07-24 00:10:35
【问题描述】:
我有以下 Java 类,它做一件事,从 config.properties 中触发值。
当需要关闭 fileInputStream 时,我想我在 Wikipedia 上读到,最好将它放在 finally 块中。因为它在 try/catch 块中确实可以正常工作。
你能告诉我在 finally 部分中得到fileInputStream.close() 的更正吗?
ConfigProperties.java 包基础;
import java.io.FileInputStream;
import java.util.Properties;
public class ConfigProperties {
public FileInputStream fileInputStream;
public String property;
public String getConfigProperties(String strProperty) {
Properties configProperties = new Properties();
try {
fileInputStream = new FileInputStream("resources/config.properties");
configProperties.load(fileInputStream);
property = configProperties.getProperty(strProperty);
System.out.println("getConfigProperties(" + strProperty + ")");
// use a finally block to close your Stream.
// If an exception occurs, do you want the application to shut down?
} catch (Exception ex) {
// TODO
System.out.println("Exception: " + ex);
}
finally {
fileInputStream.close();
}
return property;
}
}
解决方案是否只能按照 Eclipse 的建议执行并在 finally 块中执行?
finally {
try {
fileInputStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
【问题讨论】:
-
仅供参考:commons-io 有一个很好的功能:IOUtils.closeQuietly() 将处理关闭时的 try/catch。您的代码会看起来更好:) 请记住,此函数不会让您有机会响应 IOException,但通常人们不会这样做并且无论如何都会忽略该异常。如果您需要响应,请创建自己的实用程序方法来记录或打印堆栈跟踪或您需要做的任何事情。
标签: java oop try-catch-finally