다음과 같은 Java 클래스가 있는데, 하나는 config.properties에서 값을 발급합니다.try/catch/finally 블록으로 fileInputStream.close를 둘러싸 야합니까? 어떻게 된거 야?
fileInputStream
을 닫을 때, 나는 위키피디아에서 마침내 블록에있는 것이 좋다는 것을 읽은 것으로 생각합니다. 솔직히 try/catch 블록에서 제대로 작동하기 때문입니다.
마침내 섹션에 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 {
try {
fileInputStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
감사합니다.
: 공유지-IO
try
블록 종료 때, 자바 7의 도입으로, 자동으로 선언 된 자원을 닫습니다try
-with-resource 문은 이제이 있습니다 IOUtils.closeQuietly()는 try/catch를 처리 할 좋은 함수를 가지고있다. 코드가 훨씬 멋지게 보일 것입니다 :)이 함수는 IOException에 응답 할 기회를주지는 않지만 일반적으로 사람들은 그렇게하지 않고 예외를 무시합니다. 응답해야하는 경우 스택 추적 또는 필요한 작업을 기록하거나 인쇄하는 자체 유틸리티 메서드를 만듭니다. – Matt