file-io finally try - java prova finalmente a bloccare per chiudere il flusso





3 Answers

Inoltre, se stai utilizzando Java 7, puoi utilizzare try-with-resources :

try(BufferedReader r = new BufferedReader(new InputStreamReader(address.openStream()))) {
    String inLine;
    while ((inLine = r.readLine()) != null) {
        System.out.println(inLine);
    }
} catch(IOException readException) {
    readException.printStackTrace();
}           
catch shorthand before

Voglio chiudere il mio stream nel blocco finally, ma lancia una IOException quindi sembra che dovrò nidificare un altro blocco try nel mio blocco finally per chiudere lo stream. È il modo giusto per farlo? Sembra un po 'goffo.

Ecco il codice:

 public void read() {
    try {
        r = new BufferedReader(new InputStreamReader(address.openStream()));
        String inLine;
        while ((inLine = r.readLine()) != null) {
            System.out.println(inLine);
        }
    } catch (IOException readException) {
        readException.printStackTrace();
    } finally {
        try {
            if (r!=null) r.close();
        } catch (Exception e){
            e.printStackTrace();
        }
    }


}



Sì, è goffo, brutto e confuso. Una possibile soluzione è quella di usare Commons IO che offre un metodo closeQuietly .

C'è una serie di domande nella colonna "Correlata" nella parte destra di questa pagina che sono in realtà duplicati, vi consiglio di dare un'occhiata a questi per altri modi di affrontare questo problema.




Il tuo approccio all'interno è finalmente corretto. Se il codice che si chiama in un blocco finally può generare un'eccezione, assicurarsi di gestirlo o registrarlo. Non lasciarlo mai fuoriuscire dal blocco finale.

All'interno del blocco catch stai ingoiando l'eccezione - che non è corretta.

Grazie...




Related