Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Java - errore su lettura file di oggetti
Forum - Java - errore su lettura file di oggetti

Avatar
Cesaruz (Normal User)
Pro


Messaggi: 83
Iscritto: 25/10/2007

Segnala al moderatore
Postato alle 16:30
Domenica, 01/02/2009
Ciao a tutti...ho un problema sulla lettura dal file di oggetti...allora io ho un file dove vado a salvare degli oggetti serializabili(quindi persistenti) solo che all'avio del programma quando vado a recuperare i vari oggetti salvati in precedenza mi va in eccezzione :( :
Errore: java.io.StreamCorruptedException: invalid type code: AC

Che cosa significa?E come lo risolvo?
Grazie anticipatamente a tutti...:k:

PM Quote
Avatar
netarrow (Admin)
Guru^2


Messaggi: 2502
Iscritto: 12/05/2004

Segnala al moderatore
Postato alle 19:18
Mercoledì, 04/02/2009
Senza codice, non possiamo aiutarti.
Mostraci come salvi e come carichi.
Cmq io personalmente non ho mai serializzato più di un oggetto per file. Se avevo più oggetti da serializzare li mettevo in un vettore e serializzavo il vettore.

PM Quote
Avatar
Cesaruz (Normal User)
Pro


Messaggi: 83
Iscritto: 25/10/2007

Segnala al moderatore
Postato alle 8:00
Venerdì, 06/02/2009
OK ora ti metto il codice...
Codice sorgente - presumibilmente Java

  1. public static void main(String[] args)throws Exception {
  2.         //boolean pieno=false;
  3.         //creazione del file
  4.         File f = new File("Libr.txt");
  5.         File fo = new File("Libri.dat");
  6.        // File o = new File("Libri.dat");
  7.         //Stream di input per file di oggtti  
  8.         if(f.canWrite()){
  9.             System.out.println("Si puo scrivere ");
  10.         }
  11.         //Input per i file bufferizzati
  12.         FileReader lettura = new FileReader(f);
  13.         BufferedReader leggobuf = new BufferedReader(lettura);
  14.        
  15.         //Stream di output per file bufferizzati      
  16.         BufferedWriter scr =new BufferedWriter(new FileWriter(f,true));
  17.         //Stream di output file di oggetti      
  18.         //FileOutputStream fout = new FileOutputStream(o,true);
  19.         ObjectOutputStream writ = new ObjectOutputStream(new FileOutputStream(fo,true));
  20.         FileInputStream fin=new FileInputStream(fo);
  21.         ObjectInputStream leggo=new ObjectInputStream(fin);
  22.        // RandomAccessFile leggor = new RandomAccessFile("Libr.dat","rw");
  23.         //Accesso alla tastiera    
  24.         BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
  25.         // Main Libreria      
  26.         Libro L=new Libro();//Oggetto libro per l'acquisizione
  27.         Gestione_Libreria Libr = new Gestione_Libreria(100);       //Oggeto gestione libri che rappresenta il vettore dei libri        
  28.         try{
  29.             Libro l= new Libro();
  30.             System.out.println("Leggo da file... ");          
  31.             try{                
  32.                 while(true){
  33.                     try{
  34.                         l = (Libro)leggo.readObject();
  35.                         Libr.setLibro(l);
  36.                         Libr.incrementa();
  37.                         System.out.println(l.ToString());
  38.                     }catch(EOFException ex){
  39.                         break;
  40.                     }
  41.                    // n--;
  42.                 }
  43.                 leggo.close();
  44.             }finally{
  45.                 System.out.println("Tentativo di lettura...");
  46.             }
  47.         }catch(Exception ex){
  48.                 System.out.println("Attenzione :"+ex);
  49.         }


Inquesta parte dichiaro i vari stream di input e di output e poi ricarico i vari oggetti nel mio vettore...
Ora il salvataggio...
Codice sorgente - presumibilmente Plain Text

  1. System.out.println("Salvo su file...");
  2.                     writ.write(Libr.getNlibri());
  3.                     scr.write(Libr.getNlibri());
  4.                     for(int i =0;i<Libr.getNlibri();i++){
  5.                         scr.write("---------------------------");
  6.                         scr.write(Libr.getLibro(i).ToString());                      
  7.                         scr.write("\n---------------------------");
  8.                         scr.newLine();
  9.                         writ.writeObject(Libr.getLibro(i));
  10.                     }
  11.                     scr.close();


Ok qui salvo...ci sono delle classi che uso per gestire il vettore ed i vari oggetti...se possono servire ditemelo che le posto...
Grazie anticipatamente a tutti:k:

PM Quote
Avatar
netarrow (Admin)
Guru^2


Messaggi: 2502
Iscritto: 12/05/2004

Segnala al moderatore
Postato alle 11:13
Venerdì, 06/02/2009
invece di serializzare per ogni oggetto, inserisci ogni oggetto in un Vector, e poi serializza un'unica volta l'oggetto Vector.

PM Quote
Avatar
Cesaruz (Normal User)
Pro


Messaggi: 83
Iscritto: 25/10/2007

Segnala al moderatore
Postato alle 19:09
Venerdì, 06/02/2009
Senti ho provato ma non sono ancora riuscito...mi lacia sempre lo stesso tipo di eccezzione... comunque ora ti posto il codice probabilmente ho sbagliato qualcosa.:(
Questo lo uso per leggere:
Codice sorgente - presumibilmente Java

  1. Vector v = new Vector(1,1);
  2.         try{
  3.              while(true){
  4.                 try{
  5.                     v= (Vector)leggo.readObject();
  6.                 }catch(EOFException e){
  7.                     break;
  8.                 }
  9.              }
  10.              leggo.close();
  11.         }catch(Exception ex){
  12.             System.out.println("Attenzione : "+ex);
  13.         }


E questo per salvare:
Codice sorgente - presumibilmente Plain Text

  1. for(int i =0;i<Libr.getNlibri();i++){
  2.                         v.add(Libr.getLibro(i));
  3.                         scr.write("---------------------------");
  4.                         scr.write(Libr.getLibro(i).ToString());                      
  5.                         scr.write("\n---------------------------");
  6.                         scr.newLine();
  7.                         //writ.writeObject(Libr.getLibro(i));
  8.                     }
  9.  writ.writeObject(v);


l'eccezzione in lettura è sempre la stessa:
java.io.StreamCorruptedException: invalid type code: AC
Grazie anticipatamente a tutti.
:k:

Ultima modifica effettuata da Cesaruz il 06/02/2009 alle 19:10
PM Quote
Avatar
netarrow (Admin)
Guru^2


Messaggi: 2502
Iscritto: 12/05/2004

Segnala al moderatore
Postato alle 23:27
Venerdì, 06/02/2009
che sia writ che non viene chiuso con close?
se non è neanche questo metti come allegato il progetto e quando ho tempo lo provo.

PM Quote
Avatar
Cesaruz (Normal User)
Pro


Messaggi: 83
Iscritto: 25/10/2007

Segnala al moderatore
Postato alle 19:05
Martedì, 10/02/2009
Ok grazie..ora funziona avevo sbagliato la chiusura dello strea...:k:
Cmq ora avrei un'altra domanda... per i file di testo quindi di caratteri per la lettura utlizzo il metodo readLine() che mi restituisce una stringa con l'intera linea...però come faccio a smettere di leggere dal file???Nel senso come faccio a capire che non c'è più niente da leggere??La IOException mi pare che non viene lanciata...
Grazie in anticipo a tutti...

PM Quote
Avatar
netarrow (Admin)
Guru^2


Messaggi: 2502
Iscritto: 12/05/2004

Segnala al moderatore
Postato alle 9:20
Mercoledì, 11/02/2009
capisci che il file è finito quando readLine ti ritorna null

PM Quote