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.

Grazie! volevo chiedere un'altra cosa collegata a questa. Sto cercando di salvare delle parole in un file a seconda di un altro file e della jtextfield.
In pratica se io scrivo una parola che è già presente in un file la JLabel mi deve segnalare che non posso salvare, altrimenti si: posto il codice.
public boolean c2(){

for(int i=0; i<mm.getPrenotazioni(); i++){
if(mm.getPrenotato(i).getMatr().equalsIgnoreCase(m atr.getText())){
//System.out.println(mm.getPrenotato(i).getMatr());
errore.setText("registrazione già effettuata");
return true;
}
}
return false;
Se la condizione è vera, cioè se la parola scritta nella textfield è contenuta nel file allora non posso salvare il file. Il problema è che facendo così mi controlla solo la prima parola del file, non riesco a capire perchè. Come posso risolvere?