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:
Esempio di trattamento della scrittura di un file di testo, con bufferizzazione: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 }
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".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) { } } } } }
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.![]()



Rispondi quotando