n° 186
Luglio/Agosto 2013
Giugno 19, 2013, 04:43:58 pm *
Benvenuto! Accedi o registrati.
Hai dimenticato l'e-mail di attivazione?

Accesso con nome utente, password e durata della sessione
Notizia:
 
   Indice   Linux Windows Techassistance Gameassistance videogame hardware Aiuto Ricerca Agenda Downloads Accedi Registrati  

* Messaggi recenti
Messaggi recenti
Pagine: [1]   Vai giù
  Stampa  
Autore Discussione: Problemi con writeObject()  (Letto 468 volte)
0 utenti e 1 Utente non registrato stanno visualizzando questa discussione.
clros
Jr. Member
**

Karma: +1/-16
Scollegato Scollegato

Messaggi: 217


Mostra profilo
« inserita:: Agosto 19, 2012, 10:26:40 am »

Ciao a tutti.
Ho riscontrato un problema con un programma che sto realizzando in Java.

Ho una prima classe:

Codice:
import java.io.*;

class Persona implements Serializable
{
private String nome;
private String cognome;
private int età;

//costruttore
public Persona(String n,String c, int e)
{
nome = n;
cognome = c;
età = e;
}

public String toString()
{
return "Ciao. Io sono "+nome+" "+cognome+" e ho "+età+" anni.";
}
}

E una seconda Classe, con il main, dove creo tre persone e le memorizzo su file.

Codice:
import java.io.*;

class ProvaPersona
{
public static void main(String a[])
{
Persona p1 = new Persona("Claudio","La Rosa",37);
Persona p2 = new Persona("Lillo","Capuano",57);
Persona p3 = new Persona("Leelee","Sobieski",32);
//Visualizzo le persone
System.out.println(p1);
System.out.println(p2);
System.out.println(p3);

//Scrivo le persone sul file
scriviSuFile(p1);
scriviSuFile(p2);
                scriviSuFile(p3);


//adesso rileggo da file!!
Persona p;
try
{
//Creo uno stream di input
FileInputStream f = new FileInputStream("Persone.dat");
ObjectInputStream fIN = new ObjectInputStream(f);
                  //leggo gli strip dal file, fino a quando ho finito (raggiungo l'EndOfFile)...
while( (p = (Persona)fIN.readObject()) != null )
{
System.out.println("LETTO: "+p);
}

//chiudo gli stream
fIN.close();
f.close();
}
catch(ClassNotFoundException c)
{
System.out.println("Eccezione ClassNotFoud");
}
catch(EOFException e)
{
System.out.println("Eccezione EOF");
}
catch (IOException e)
{
System.out.println("Eccezione IO");
}
}



public static void scriviSuFile(Persona p)
{
try
{
//apro il file corrispondente a questo disco in modalità "append", usando la concatenazione di stream...
FileOutputStream f = new FileOutputStream("Persone.dat",true); //il secondo parametro indica che il file è aperto in append-mode
ObjectOutputStream fOUT = new ObjectOutputStream(f);
//scrivo l'oggetto s (di tipo Strip) sul disco...
fOUT.writeObject(p);
//chiudo gli stream
fOUT.close();
f.close();
}
catch (IOException e)
{
System.out.println("Errore nella memorizzazione");
}
}
}

Il problema è che se scrivo i tre oggetti persona "singolarmente" sul file (aprendo e chiudendo di volta in volta il file), quando tento di rileggere, legge solo la prima persona memorizzata e poi solleva una IOException.

E' normale questo comportamento?
Da notare che lo stream di output lo apro in modalità append.
Registrato

bertolottipf
Full Member
***

Karma: +4/-4
Scollegato Scollegato

Messaggi: 326


Mostra profilo E-mail
« Risposta #1 inserita:: Agosto 19, 2012, 11:10:33 am »

Ti consiglio di leggerti http://www.redbaron85.com/tutorials/60-java-e-java2d/224-java-io-su-file-e-persistenza-dei-dati-le-basi-della-serializzazione-degli-oggetti-e-loro-lettura-e-scrittura-da-e-su-file.html
Registrato
clros
Jr. Member
**

Karma: +1/-16
Scollegato Scollegato

Messaggi: 217


Mostra profilo
« Risposta #2 inserita:: Agosto 19, 2012, 01:49:57 pm »

Uhmmm non mi pare ci sia scritto niente di nuovo rispetto a quello che sapevo già e non trovo nessun altro articolo in merito (fa riferimento ad un articolo futuro)...
Registrato

mega_saiyan
Sr. Member
****

Karma: +16/-15
Scollegato Scollegato

Messaggi: 989


Mostra profilo
« Risposta #3 inserita:: Agosto 21, 2012, 08:15:50 am »

Spero che il link che ti indico ti sia utile:

http://www.daniweb.com/software-development/java/threads/406909/how-to-append-in-objectoutputstream#


Piero Astolfi
Registrato
Pagine: [1]   Vai su
  Stampa  
 
Vai a:  

Copyright © 2011 Edizioni Master SpA. p.iva : 02105820787

Tutti i diritti di proprietà letteraria e artistica riservati. - Privacy



Links to Page