Anche io mi ritrovo con lo stesso problema di Darrol, conosco la serializzazione ma non riesco ad implementarla correttamente:
mettiamo che io abbia un Integer a cui assegno un valore e voglio sia mantenuto:

ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("salva"));
ObjectInputStream in = new ObjectInputStream (new FileInputStream ("salva"));;
Integer r;
int scelta = 0;
while(scelta != 1 && scelta !=2)
{
System.out.println("Scegli 1 per creare, 2 per deserializzare:");
scelta = SavitchIn.readInt();
}
switch(scelta)
{
case 1:
System.out.println("Inserisci valore:");
int valore = SavitchIn.readInt();
r = new Integer(valore);
out.writeObject(r);

case 2:
if(in.read() > 0)
{
r = (Integer)in.readObject();
System.out.println("Il valore e': " + r.intValue());
}
}

Il problema credo stia tutto nel case2 dello switch:
il fatto che un utente al primo utilizzo mi può scegliere il case2 mi obbliga a mettere la condizione che se il file è vuoto non posso leggerci, anche se all'inizio credevo che readObject() restituisse null e potevo usare questa come condizione, ma non è così!
il metodo read() restituisce un int per cui se non c'è nulla nel file non entro nell'if.
Il fatto è che se faccio case1 e inserisco un valore nell'oggetto r, al secondo giro il file pare sia sempre vuoto perchè se faccio in modo da andare in case2 non entra nell'if, come se out e in puntassero a 2 file "salva" differenti.
Qualcuno mi sa dire cosa sto sbagliando?

Grazie