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
|