|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Dec 2002
Messaggi: 3359
|
[JAVA]Serializzare e deserializzare un oggetto
Ciao a tutti, ho creato una classe per gestire i file che creo per tenere in memoria dei dati.
La classe è questa: Codice:
import java.io.*;
public class GestioneFileDati {
FileOutputStream fo=null;
FileInputStream fi=null;
public GestioneFileDati(String path){
try{
fo=new FileOutputStream(path);
fi=new FileInputStream(path);
}
catch(IOException e){
System.out.println("Impossibile aprire il file di dati: "+e);
}
}
public void salva(Object obj){
try{
ObjectOutputStream os=new ObjectOutputStream(fo);
os.writeObject(obj);
os.flush();
os.close();
}
catch(IOException e){
System.out.println("Impossibile salvare i dati: "+e);
}
}
public Object carica(){
Object obj=null;
try{
ObjectInputStream is=new ObjectInputStream(fi);
obj=is.readObject();
is.close();
}
catch(IOException e){
System.out.println("Impossibile caricare i dati: "+e);
}
catch(ClassNotFoundException e){
System.err.println();
}
return obj;
}
public void cambiaFile(String path){
try{
fo=new FileOutputStream(path);
fi=new FileInputStream(path);
}
catch(IOException e){
System.out.println("Impossibile aprire il file di dati: "+e);
}
}
}
Questa classe la uso in questo modo: PER SALVARE... Codice:
DatiGiocatore dg=new DatiGiocatore();
GestioneFileDati file=new GestioneFileDati("C:/imm/Data/Giocatore.dat");
public Ambiente(Container cnt){
int[] array={25,4,3,5};
dg.animazione(array);
file.salva(dg);
}
Codice:
DatiGiocatore dg=new DatiGiocatore();
GestioneFileDati file=new GestioneFileDati("C:/imm/Data/Giocatore.dat");
public Ambiente(Container cnt){
dg=(DatiGiocatore)file.carica();
System.out.println(dg.animazioe());
}
|
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Nov 2004
Messaggi: 357
|
ad una prima occhiata sembra corretto
L'oggetto che salvi implementa Serializable, vero? |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Dec 2002
Messaggi: 3359
|
Si certo, per sicurezza metto la classe anche dell'oggetto non si sa mai che sia sbagliato quello:
Codice:
import java.io.*;
public class DatiGiocatore implements Serializable{
int[] animazione=new int[4]; //totoali,ultimo,salto,abb.
public DatiGiocatore(){
}
public void animazione(int[] amz){
animazione=amz;
}
public int[] animazione(){
return animazione;
}
}
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: May 2005
Città: Roma
Messaggi: 7938
|
scusa, potresti postare correttamente il codice dell'errore, perchè non capisco se l'errore lo dà quando crei il
Codice:
fi=new FileInputStream(path); Codice:
public Object carica() Codice:
fi=new FileInputStream(path);
__________________
My gaming placement |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Dec 2002
Messaggi: 3359
|
Ciao,
L'errore me lo da il meotodo pubblic Object carica(), infatti viene sollevata questa eccezzione catch(IOException e){ System.out.println("Impossibile caricare i dati: "+e); } E stampato "Impossibile caricare i dati: java.io.EOFException". |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Dec 2002
Messaggi: 3359
|
EOFException suona come un end of file exception, am non capisco come possa esserci un problema sull'end of file...
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: May 2005
Città: Roma
Messaggi: 7938
|
per curiosità, metti una riga vuota alla fine del file, per curiosità, e vedi se dà lo stesso errore.....
__________________
My gaming placement |
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Dec 2002
Messaggi: 3359
|
Ma intendi dopo che l'ho salvato?
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Dec 2002
Messaggi: 3359
|
Dopo che lo salvo il file Giocatore.dat contiene questo:
"¬í sr DatiGiocatoreöÊXÇ”:0 [ animazionet [Ixpur [IMº`&vê²¥ xp " Tutto quello tra "". Il fatto è che scompare e diventa vuoto quando provo a caricarlo. Dove metto la riga vuota? |
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: May 2005
Città: Roma
Messaggi: 7938
|
Alla fine del file in cui salvi.
__________________
My gaming placement |
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Dec 2002
Messaggi: 3359
|
Ma cosa intendi per riga vuota? io ho messo una riga premendo invio e poi ho messo uno spazio, ma l'errore rimane...
...lo sapevo che avevo le streghe nel computer |
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: May 2005
Città: Roma
Messaggi: 7938
|
prova a fare così:
Codice:
public DatiGiocatore carica(){
DatiGiocatore obj=null;
try{
ObjectInputStream is=new ObjectInputStream(fi);
obj=(DatiGiocatore )is.readObject();
is.close();
}
catch(IOException e){
System.out.println("Impossibile caricare i dati: "+e);
}
catch(ClassNotFoundException e){
System.err.println();
}
return obj;
}
__________________
My gaming placement |
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: Dec 2002
Messaggi: 3359
|
Stesso errore anche così, ho provato invece così:
Codice:
public Object carica(){
Object obj=null;
try{
fi=new FileInputStream(path);
is=new ObjectInputStream(fi);
obj=is.readObject();
is.close();
}
catch(IOException e){
System.out.println("Impossibile caricare i dati: "+e);
}
catch(ClassNotFoundException e){
System.err.println();
}
return obj;
}
|
|
|
|
|
|
#14 |
|
Senior Member
Iscritto dal: Dec 2002
Messaggi: 3359
|
Mi correggo con l'ultimo metodo funziona alla perfezione, comunque è parecchio strano la modifica che ho fatto è praticamente inutile credo...bho.
Grazie per la pazienza!!! |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 14:51.



















