Oppure

Loading
08/02/21 12:21
conpic
Salve a tutti. Ho un problema di serializzazione su un file con estensione .dat. Ho generato due semplici file: uno scrivianag.java con la classe anag.java e un altro file leggianag.java che legge i dati scritti dal primo. scrivianag.java è il seguente:
import java.io.*;
/*
Memorizza cognome e nome in un file serializzato
*/
public class scrivianag {

public static void main(String[] args) {

//impostazione dello standard di input
    InputStreamReader in = new InputStreamReader(System.in);
    BufferedReader tastiera = new BufferedReader(in);

String wcogn,wnome;
String risp="s";
//dichiarazione oggetto
anag oanag;

try{
//definizione stream e apertura del file anag.dat
FileOutputStream w=new FileOutputStream("anag.dat",true);
//definizione stream per l'utilizzo dei metodi per la scrittura
ObjectOutputStream fw=new ObjectOutputStream(w);
while (risp.equals("s";)){

System.out.print("Cognome ";);
wcogn=tastiera.readLine();
System.out.print("Nome ";);
wnome=tastiera.readLine();

//creazione istanza dell'oggetto (memorizzazione dati
//nell'oggetto
oanag=new anag(wcogn,wnome);

//scrittura dell'oggetto nel file fr
fw.writeObject(oanag);

System.out.println("Continui s/n ?";);
risp=tastiera.readLine();
}
fw.flush();
fw.close();

}
catch(Exception e){
System.out.println("Errore"+e.getMessage());
}
}
}
la classe anag.java è la seguente:
import java.io.*;
public class anag implements Serializable {

//elenco attributi
public String cogn;
public String nome;

//costruttore
public anag(String cogn,String nome){
this.cogn=cogn;
this.nome=nome;
}
}


leggi.java invece è il seguente:
import java.io.*;
/*
Memorizza cognome e nome in un file serializzato
*/
public class leggianag {

public static void main(String[] args) {

//impostazione dello standard di input
    InputStreamReader in = new InputStreamReader(System.in);
    BufferedReader tastiera = new BufferedReader(in);

String wcogn,wnome;
String risp="s";
//dichiarazione oggetto
anag oanag;


//********** lettura del file anag.dat
try{
FileInputStream r=new FileInputStream("anag.dat";);


while (true){
try{
ObjectInputStream fr=new ObjectInputStream(r);
oanag=(anag)fr.readObject();
System.out.println(oanag.cogn+" "+oanag.nome);

}
catch(EOFException e){
break;
}
}

r.close();
}
catch (Exception e){
System.out.println("Errore "+e.getMessage());
}
}

}


Se inserisco più coppie di nominativi sembra che siano memorizzate nel file. Quando leggo invece, legge solo la prima coppia e segnala il seguente errore:

ant -f H:\NETBEANS\leggianag -Dnb.internal.action.name=run run
init:
Deleting: H:\NETBEANS\leggianag\build\built-jar.properties
deps-jar:
Updating property file: H:\NETBEANS\leggianag\build\built-jar.properties
Compiling 1 source file to H:\NETBEANS\leggianag\build\classes
compile:
run:
congedo sergio
Errore invalid stream header: 7371007E
BUILD SUCCESSFUL (total time: 0 seconds)

Da quanto letto su internet sembra che java tra una memorizzazione e un'altra inserisca degli header , non riconosciuti in fase di lettura. Come posso risolvere il problema?. Grazie