Il metodo più semplice dal punto di vista concettuale credo sia questo:
Il primo oggetto che salvi nel file è un Integer che ti indica quanti oggetti sono salvati nel file.
Poi, via via, salvi tutti gli oggetti nel file.
A questo punto, quando apri il file ed effettui la prima lettura, sai che il primo oggetto che leggi è un Integer e automaticamente sai anche quanti oggetti sono contenuti nel file.
L'aggiornamento è semplice; supponiamo che ci siano n oggetti salvati nel file. La prima lettura ti dice che ce ne sono n, incrementi questo n di 1. Leggi tutti gli n oggetti e li salvi in un buffer (un array o un Vector), aggiungi al buffer il nuovo elemento, quindi risalvi tutto nel file.
Ora veniamo al codice (supponiamo siano oggetti di tipo Oggetto):
codice:
FileInputStream fis = new FileInputStream(nomefile);
ObjectInputStream ois = new ObjectInputStream(fis);
// Mi informo: quanti oggetti sono salvati?
int numoggetti = ((Integer) ois.readObject()).intValue();
// Li leggo tutti e li metto in un Vector
Vector v = new Vector();
for (int i=0; i<numoggetti; i++) v.add((Oggetto) ois.readObject());
// Ne voglio aggiungere uno
v.add( new Oggetto() );
// Chiudo il file
ois.close();
// Aggiorno il contatore di oggetti e ricreo il file.
numoggetti++;
FileOutputStream fos = new FileOutputStream(nomefile);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject( new Integer(numoggetti) ); // è importante: deve essere un oggetto Integer non un int
for (int i=0; i<numoggetti; i++) oos.writeObject((Oggetto) v.elementAt(i));
// Chiudo il file
oos.close();
Spero sia abbastanza chiaro e spero, soprattutto, ti sia d'aiuto.
Se hai in mente altre soluzioni, postamele, ne discutiamo insieme (sono sempre alla ricerca della soluzione più performante e al contempo semplice).
Ciao.