Ciao a tutti.
Ho riscontrato un problema con un programma che sto realizzando in Java.
Ho una prima classe:
import java.io.*;
class Persona implements Serializable
{
private String nome;
private String cognome;
private int età;
//costruttore
public Persona(String n,String c, int e)
{
nome = n;
cognome = c;
età = e;
}
public String toString()
{
return "Ciao. Io sono "+nome+" "+cognome+" e ho "+età+" anni.";
}
}
E una seconda Classe, con il main, dove creo tre persone e le memorizzo su file.
import java.io.*;
class ProvaPersona
{
public static void main(String a[])
{
Persona p1 = new Persona("Claudio","La Rosa",37);
Persona p2 = new Persona("Lillo","Capuano",57);
Persona p3 = new Persona("Leelee","Sobieski",32);
//Visualizzo le persone
System.out.println(p1);
System.out.println(p2);
System.out.println(p3);
//Scrivo le persone sul file
scriviSuFile(p1);
scriviSuFile(p2);
scriviSuFile(p3);
//adesso rileggo da file!!
Persona p;
try
{
//Creo uno stream di input
FileInputStream f = new FileInputStream("Persone.dat");
ObjectInputStream fIN = new ObjectInputStream(f);
//leggo gli strip dal file, fino a quando ho finito (raggiungo l'EndOfFile)...
while( (p = (Persona)fIN.readObject()) != null )
{
System.out.println("LETTO: "+p);
}
//chiudo gli stream
fIN.close();
f.close();
}
catch(ClassNotFoundException c)
{
System.out.println("Eccezione ClassNotFoud");
}
catch(EOFException e)
{
System.out.println("Eccezione EOF");
}
catch (IOException e)
{
System.out.println("Eccezione IO");
}
}
public static void scriviSuFile(Persona p)
{
try
{
//apro il file corrispondente a questo disco in modalità "append", usando la concatenazione di stream...
FileOutputStream f = new FileOutputStream("Persone.dat",true); //il secondo parametro indica che il file è aperto in append-mode
ObjectOutputStream fOUT = new ObjectOutputStream(f);
//scrivo l'oggetto s (di tipo Strip) sul disco...
fOUT.writeObject(p);
//chiudo gli stream
fOUT.close();
f.close();
}
catch (IOException e)
{
System.out.println("Errore nella memorizzazione");
}
}
}
Il problema è che se scrivo i tre oggetti persona "singolarmente" sul file (aprendo e chiudendo di volta in volta il file), quando tento di rileggere, legge solo la prima persona memorizzata e poi solleva una IOException.
E' normale questo comportamento?
Da notare che lo stream di output lo apro in modalità append.