Ho un problemino:
ho creato un programmino che deve poter scrivere e prelevare record da un file binario in momenti diversi. Visto che i dati sono pochi non ho bisogno di un DB. Per scrivere e leggere gli oggetti uso rispettivamente le classi ObjectOutputStream e ObjectInputStream.
Ho notato che se faccio una sorta di "append" come nei file di testo a fine file quando devo inserire un oggetto, quando lo vado a leggere poi mi dice che il file è corrotto.
questo è il mio metodo di scrittura file:
(penso che il problema sia nell'aggiornamento del file quando aggiungo nuovi oggetti al suo interno)
public void toFile(){
ObjectOutputStream outputStream;
File dir = new File("data");
if (!(dir.exists()))
dir.mkdir();
try {
// uso true come parametro per inserire a fine file un nuovo oggetto
outputStream = new ObjectOutputStream(new FileOutputStream("data/record.data",true));
outputStream.writeObject(this);
outputStream.flush();
outputStream.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
System.err.println(e.getMessage());
e.printStackTrace();
}
}
nella lettura del file, dopo che preleva il primo record, al secondo ciclo mi da questo errore:
java.io.StreamCorruptedException: invalid type code: AC
at java.io.ObjectInputStream.readObject0(ObjectInputS tream.java:1356)
at java.io.ObjectInputStream.readObject(ObjectInputSt ream.java:351)
at zama.data.Contatto.readFromFile(Contatto.java:65)
at zama.data.Contatto.main(Contatto.java:101)
Possibile che non veda il file come se gli avessi semplicemente "appeso" in coda un altro oggetto?