Originariamente inviato da LeleFT
Secondo me il punto è qui. ff potrebbe essere nullo (ma non lo sapremo mai perchè il codice che hai postato non è sufficiente a capirlo).
Alcune considerazioni:
1) Tieni separati i vari wrapper di scrittura su file
2) Il trattamento delle eccezioni, fallo tutto nel metodo di salvataggio
3) Usa la clausola finally per evitare di lasciare aperti i file in caso di eccezioni
4) Usa il metodo flush() per assicurarti che la scrittura venga effettivamente fatta.
Qui sotto è come dovrebbero essere fatte le cose per avere maggiori garanzie di corretta scrittura:
codice:
PrintStream ps = null;
FileOutputStream fos = null;
try {
fos = new FileOutputStream("prenota.txt");
ps = new PrintStream( fos );
ps.println(ff.getMatr().getText()+","ff.getPass().getText()+","ff.getfo().getItemListener();
ps.flush();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (ps != null) {
try { ps.close(); } catch (Exception e) { }
} else {
if (fos != null) {
try { fos.close(); } catch (Exception e) { }
}
}
}
I due oggetti (PrintStream e FileOutputStream) vengono creati separatamente, così hai un maggiore controllo nell'eventuale caso di eccezione in crerazione di uno dei due.
All'interno del blocco try viene fatta la scrittura e il flush. La chiusura degli stream viene relegata al blocco finally, così essa viene garantita anche in caso di eccezione.
PS: usa i tag CODE per il codice, come ho fatto io per mantenere indentazione e formattazione.