java prova finalmente a bloccare per chiudere il flusso


2 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();
}           
Question

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();
        }
    }


}



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...




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.






Related