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
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