Ich habe die folgende Java-Klasse, die eine Sache tut, feuert Werte aus der config.properties.Muss ich fileInputStream.close mit einem try/catch/finally Block umgeben? Wie wird es gemacht?
Wenn es Zeit ist, die fileInputStream
zu schließen, denke ich, dass ich auf Wikipedia gelesen habe, dass es gut ist, es in einem Endblock zu haben. Weil es ehrlich gesagt gut funktioniert in try/catch block.
Können Sie mir zeigen, korrigieren Sie fileInputStream.close()
in einem abschließend Abschnitt?
ConfigProperties.java Gehäusebasis;
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;
}
}
Ist die Lösung nur zu tun, wie Eclipse vorschlägt und dies im finally block tun?
finally {
try {
fileInputStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Danke allen!
FYI: commons-io hat eine nette Funktion: IOUtils.closeQuietly(), die sich um das try/catch beim Schließen kümmert. Ihr Code wird viel schöner aussehen :) Beachten Sie, dass diese Funktion Ihnen nicht die Möglichkeit gibt, auf die IOException zu reagieren, aber normalerweise tun die Leute das nicht und ignorieren die Ausnahme trotzdem. Wenn Sie reagieren müssen, erstellen Sie eine eigene Hilfsmethode, die einen Stack-Trace protokolliert oder druckt oder was auch immer Sie tun müssen. – Matt