Tôi có Lớp Java sau đây thực hiện một điều, kích hoạt các giá trị từ config.properties.Tôi có cần bao quanh tệpInputStream.close với khối try/catch/finally không? Làm thế nào là nó được thực hiện?
Khi đến lúc đóng fileInputStream
, tôi nghĩ rằng tôi đã đọc trên Wikipedia rằng tốt nhất là nên có nó trong một khối cuối cùng. Bởi vì nó thực sự hoạt động tốt trong khối try/catch.
Bạn có thể cho tôi chỉnh sửa để có được fileInputStream.close()
trong phần cuối cùng không?
ConfigProperties.java cơ sở gói;
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;
}
}
Giải pháp chỉ làm như Eclipse đề xuất và thực hiện điều này trong khối cuối cùng?
finally {
try {
fileInputStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Xin cảm ơn tất cả mọi người!
FYI: commons-io có một chức năng tốt đẹp: IOUtils.closeQuietly() sẽ xử lý việc thử/bắt khi đóng. Mã của bạn sẽ trông đẹp hơn :) Hãy nhớ rằng chức năng này không cung cấp cho bạn cơ hội để trả lời cho IOException, nhưng thường thì mọi người không làm điều đó và bỏ qua ngoại lệ. Nếu bạn cần trả lời, hãy tạo phương thức tiện ích của riêng bạn để ghi lại hoặc in dấu vết ngăn xếp hoặc bất cứ điều gì bạn cần làm. – Matt