Serializzazione e Strutture dati

stromgald

Nuovo Utente
14 Set 2011
2
0
0
Salve a tutti avrei un un problema da risolvere.
Vi spiego la mia situazione , voglio prendere dei dati dal web una volta fatto, elaborarli e conservarli serializzandoli su file. Questi dati su ho file devo riuscirli a recuperare in qualche modo , nel senso che non voglio che siano sovrascritti e quindi che vengono aggiunti nuovi Oggetti contenuti all'interno del file quindi vorrei utilizzare una struttura anche ArrayList va bene.
Ho fatto tutto il programma e riesco anche a salvare su file , il problema resta la struttura in cui memorizzarla. Ho provato quindi a salvare un arraylist <Dati> e funziona solo che funge finchè cè almeno 1 Dato dentro.//risolto questo problema ma creato un altro//
Nello specifico , quando vado a chiamare la funzione per salvare il file , gli viene passato l'oggetto Dato. Il metodo della classe che si occupa del salvataggio , caricamento e quant'altro si chiama GestioneDati. Quando invoco il metodo di salvataggio di questa classe , il programma mi legge il contenuto del file , metto questo dato in un ArrayList (che è lo stesso dato che è contenuto nel file) e aggiungo tramite il metodo .add l'oggetto Object passato come parametro (che in teoria è un oggetto Dati).
Onestamente non mi garba tanto como ho organizzato la struttura.Vorrei prima risolvere il problema (per una questione di principio) e poi trovare una struttura migliore. Considerate che deve salvare 3 4 String + 1 oggetto GregoriusCalendar ogni giorno(devo mettere il controllo di recuperare l'ultimo oggetto dell'arraylist verificare la data e controllare se è passato 1 giorno). Quindi credo che come dimensioni con l'arraylist ci siamo visto che dovrebbe contenere 2^31-1 bytes giusto?
Vi posto il codice del salvataggio e caricamento

L'errore che ricevo è Impossibile caricare i dati metodo check: java.io.EOFException e dovrebbe essere dato da tmp= (ArrayList<Dati>) ois.readObject();

Codice:
//Questo metodo controlla se vi sono dati nel file , se è vuoto credo un //ArrayList tmp inizializzato e lo passa al metodo salva
public ArrayList<Dati> check(){
		ArrayList<Dati> tmp = new ArrayList<Dati>();	
		ObjectInputStream ois;
		try{						
			fileInput=new FileInputStream("prova.dat");			
			ois=new ObjectInputStream(fileInput);			
			if(ois.readObject() == null){
				Logger.getLogger("il file è vuoto");
				ois.close();
				return tmp;			}		
//L'errore che ricevo arriva dalla riga sottostante (Impossibile caricare i dati
// metodo check: java.io.EOFException)	
			tmp= (ArrayList<Dati>) ois.readObject();			
			ois.close();
			
		}catch(IOException e){
			System.out.println("Impossibile caricare i dati metodo check: "+e);
		}
		catch(ClassNotFoundException e){
			System.err.println("error");
		}		
		return tmp;
		
	}
	[COLOR="Red"]
	//Questo metodo riceve i dati del file prova.dat che contiene un ArrayList<Dati> ed aggiunge l'oggetto Dati che viene passato dal main e lo salva su file[/COLOR]
	public void salva(Object obj){
		try{		
			ArrayList<Dati> temp = check();		
			temp.add((Dati) obj);
			ObjectOutputStream os=new ObjectOutputStream(new FileOutputStream("prova.dat"));
			os.writeObject(temp);
			os.flush();
			os.close();
		}
		catch(IOException e){
			System.out.println("Impossibile salvare i dati: "+e);
		}
	}
public Object carica(String path){
		Object obj=null;
		try{			
			fileInput=new FileInputStream(path);
			ois=new ObjectInputStream(fileInput);
			obj=ois.readObject();
			ois.close();
		}
		catch(IOException e){
			System.out.println("Impossibile caricare i dati: "+e);
		}
		catch(ClassNotFoundException e){
			System.err.println();
		}
		return obj;
	}
 
Ciao

il problema sta nel fatto particolare cerchi di leggere due volte l'oggetto da file, la prima per controllare che non sia nulla e la seconda per restituire l'oggetto.

Devi modificare il codice così:

Codice:
Object readObject = ois.readObject();
			if (readObject == null) {
				Logger.getLogger("il file è vuoto");
				ois.close();
				return tmp;
			}
			// L'errore che ricevo arriva dalla riga sottostante (Impossibile
			// caricare i dati
			// metodo check: java.io.EOFException)
			tmp = (ArrayList<Dati>) readObject;

ciao
 

Discussioni simili