Ho la seguente classe Java che fa una cosa, spara i valori da config.properties.devo circondare fileInputStream.close con un blocco try/catch/finally? Com'è fatto?
Quando arriva il momento di chiudere il fileInputStream
, penso di leggere su Wikipedia che è bello averlo in un blocco finale. Perché funziona onestamente bene nel blocco try/catch.
Puoi mostrarmi la correzione per ottenere fileInputStream.close()
in una sezione finale?
ConfigProperties.java base del pacchetto;
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;
}
}
La soluzione è solo quella di fare come suggerisce Eclipse e farlo nel blocco finale?
finally {
try {
fileInputStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Grazie a tutti!
FYI: commons-io ha una buona funzione: IOUtils.closeQuietly() che si prenderà cura del try/catch sulla chiusura. Il tuo codice sembrerà molto più carino :) Tieni presente che questa funzione non ti dà la possibilità di rispondere all'IOException, ma di solito le persone non lo fanno e ignorano comunque l'eccezione. Se devi rispondere, crea il tuo metodo di utilità che registra o stampa una traccia dello stack o qualsiasi altra cosa tu debba fare. – Matt