Piccolo suggerimento per quando si ha a che fare con l'apertura (per lettura/scrittura) di file. Questa è la procedura corretta del trattamento di questa situazione:

codice:
// Dichiarazione di tutti gli oggetti che andranno usati
// e loro inizializzazione a null
...

try {

   ...   // Inizializzazione ed uso degli oggetti

} catch (Exception e) {

   ...   // Cattura di eventuali eccezioni

} finally {

   ...   // Test di corretta inizializzazione e chiusura delle risorse,
   ...   // in ordine inverso rispetto all'inizializzazione

}
Esempio di trattamento della scrittura di un file di testo, con bufferizzazione:
codice:
// Dichiaro tutti gli oggetti che userò e li inizializzo a null
FileWriter fw = null;
BufferedWriter bw = null;
PrintWriter pw = null;

try {

   // Inizializzo e uso gli oggetti
   fw = new FileWriter("pippo.txt");
   bw = new BufferedWriter( fw );
   pw = new PrintWriter( bw );

   // Scrivo sul file
   pw.println("Ci scrivo tutto quello che voglio");
   // Flush dei dati
   pw.flush();

} catch (Exception e) {

   // Catturo eventuali eccezioni
   e.printStackTrace();

} finally {

   // Verifico che tutto sia stato inizializzato
   // e chiudo, in ordine inverso rispetto all'inizializzazione
   if (pw != null) {
      try { pw.close(); } catch (Exception e) { }
   } else {
      if (bw != null) {
         try { bw.close(); } catch (Exception e) { }
      } else {
         if (fw != null) {
            try { fw.close(); } catch (Exception e) { }
         }
      }
   }

}
Nota: l'ultimo oggetto che viene inizializzato è il primo ad essere controllato. Se questo è diverso da null, allora chiudo solo quello in quanto tutte le altre chiusure vengono fatte a catena automaticamente. Ovvero, se "pw" è inizializzato, allora sono per forza di cose inizializzati anche "bw" (visto che l'ho usato per costruire "pw") e "fw", visto che l'ho usato per costruire "bw". Chiudendo "pw", automaticamente vengono chiusi anche "bw" e "fw".

Nota2: le chiusure vanno sempre fatte nel blocco finally, in modo da garantire che queste vengano effettivamente fatte sempre (anche in caso di eccezione).


Ciao.