Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [Java]Serializzazione e Strutture dati

    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;
    		
    	}
    	
    	//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
    	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;
    	}

  2. #2

    Re: [Java]Serializzazione e Strutture dati

    Originariamente inviato da stromgald
    L'errore che ricevo è Impossibile caricare i dati metodo check: java.io.EOFException e dovrebbe essere dato da tmp= (ArrayList<Dati>) ois.readObject();
    Ottieni tale eccezione perchè vai a leggere un file vuoto, quindi sprovvisto di un'header serializzata.

  3. #3
    l'avevo intuito ,però come posso risolvere il problema?
    Ovviamente la classe Dati Implementa gia Serializable

    codice:
    import java.io.Serializable; 
    import java.util.ArrayList; 
    import java.util.GregorianCalendar; 
    public class Dati implements Serializable{ 
    ArrayList<Dati> deposito = new ArrayList<Dati>();
    private final static long serialVersionUID=1L;
    Grazie

  4. #4
    Originariamente inviato da stromgald
    l'avevo intuito ,però come posso risolvere il problema?
    Devi evitare di accedere in lettura qualora il file risulti vuoto.
    Quindi, devi subito serializzare qualcosa al suo interno..

  5. #5
    Risolto Grazie mille

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.