Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
Java - SERIALIZZAZIONE
Forum - Java - SERIALIZZAZIONE

Avatar
conpic (Normal User)
Newbie


Messaggi: 1
Iscritto: 08/02/2021

Segnala al moderatore
Postato alle 13:21
Lunedì, 08/02/2021
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

PM Quote