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

    [JAVA] oggetti persistenti

    Salve a tutti voi, sono nuovo! Mi sto dilettando con un progetto per l'università e ho incontrato un pò di problemini...
    Faccio una breve descrizione e poi passo al problema.
    Devo implementare una rubrica di nomi e indirizzi, per far ciò avevo pensato di utilizzare una classe che rappresenta i contatti e una per l'agenda con una tabellaHash di contatti.
    Nel main poi avrei gestito tutte le varie opzioni disponibili.
    Il problema sorge in quanto non mi riesce proprio di salvare la struttura su cui lavoro (cioè l'agenda con tabellehash) rendendola cosi un oggetto persistente (senza perderlo ad ogni esecuzione insomma).
    Per fare cio ho provato ad usare le classi ObjectOutputStream e ObjectInputStream e da qui nascono tutti i problemi. dapprima ho fatto si che (come le specifiche credo di aver capito che vogliano) le classi che utilizzavo implementassero serializable (semplicemente dichiarando --->implements Serializable dopo la dichiarazione di classe ma nonostante tutto ogni volta che facevo girare il main mi dava una EOFException anche se magari nel file ci aveva scritto non riusciva piu a recuperarlo.. Ora (scusate se mi sono dilungato è che ho bisogno urgente di aiuto e volevo spiegare tutto per bene..)
    qualcuno forse sa dirmi dove sbagli? se c'è un modo anche diverso di rendere lamia agenda persistente senza perdere tutti i dati ogni volta? Grazie aspetto risposte!

  2. #2
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    Io ho sempre utilizzato la serializzazione e non ho mai avuto problemi nel leggere/scrivere su file; prova, nel caso non l'avessi fatto, a salvare un solo oggetto per file, utilizzando più file diversi se vuoi salvare oggetti diersi, tieni inoltre presente che se fai delle modifiche nella classe del'oggetto che serializzi, alla successiva esecuzione l'oggetto precedentemente scritto non viene riconosciuto come valido perche la versione corrente della sua classe è cambiata. Per suggerimenti pi ùprecisi, dovremmo vedere un po di codice, ciao.

  3. #3
    Utente di HTML.it L'avatar di Xadoom
    Registrato dal
    Dec 2002
    Messaggi
    1,491
    Visto che nessuno ti ha risposto ci provo io, ma potrei dire una grande c****ta percui mi scuso se dico uno sfondone.
    Credo che la classe che implementa serializable debba contenere oggetti che siano anch'essi serializzabili, cioè se nella tua classe serializable ci sono oggetti che non implementino questa interfaccia la cosa non funge.
    Questo è quello che mi viene in mente.
    Ciao
    Windows Xp
    [Java]
    [PHP]Notepad++
    [Fortran90-77] elf90 g77
    [C++ /WinAPI] DevC++ VisualC++

  4. #4
    Proverò ad inserire un pochetto di codice il fatto è che la classe è molto lunga e anche il main (soprattutto), sicuramente ci sono delle cose sbagliate non l'ho ricontrollato(avevo provato a farlo diversamente accantonando questa soluzione ma non mi riesce lo stesso.. )... ecco a voi un pezzetto del main:

    public static void main(String[] args)throws IOException{

    Agenda personale = new Agenda();

    boolean cicla = false;
    boolean done;
    boolean bentornato = false;
    String input;

    FileInputStream fis = new FileInputStream("Prova.tmp");
    ObjectInputStream ois = new ObjectInputStream(fis);
    try{
    personale=(Agenda)ois.readObject(); // qui qualcosa non va..
    }catch(ClassNotFoundException e){}



    FileOutputStream fos=new FileOutputStream("Prova.tmp");
    ObjectOutputStream oos = new ObjectOutputStream(fos);

    /** come mi devo comportare qui??
    * in teoria è qui che dovrebbe essere ripreso l'oggetto agenda dal
    * file temporaneo ma vengo sommerso di eccezioni soprattutto:
    * EOFException

    ........


    il codice continua ed è parecchio lungo spero che mi possiate dire dove sbaglio ... grazie mille sono in mano vostra per lunedi lo devo consegnare e praticamente è solo questo che non funziona bene (veramente ci sarebbe anche un altra cosa ..(l'inserimento di due nomi uguali in una tabella hash che non so se è possibile fare oppure no... boh). comunque quello che mi preme di piu è questo diciamo..

  5. #5
    mi è venuto un po male a scriverlo cmq il come mi devo comportare qui è riferito al blocco try catch! solo per essere precisi..
    aspetto risposte!
    ah, dimenticavo,
    per XADOOM
    ho letto anche io quello che dici tu ma per quanto ne so basta implementare serializable nelle classi e come ho spiegato prima l'ho gia fatto (se ho capito giusto basta scrivere implements Serializable nella dichiarazione di classe) infatti prima mi lanciava anche eccezioni del tipo NotSerializableException mentre dopo l'implements Serializable non veniva piu fuori quell'eccezione... ergo presumo che funzioni.

  6. #6
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    Ho provato il pezzo di codice che hai postato e funziona, l'unica modifica che ho fatto è mettere le righe di scrittura nel file PRIMA delle righe di lettura (non è che nel tuo programma leggi prima di aver scritto qlcosa nel file? IN questo caso potebbe essere sollevata l'eccezione di EOFile), questo è il codice di prova da me utilizzato:



    Codice PHP:
    class Prova{
            
    Agenda personale null;
            
            
    FileOutputStream fos=new FileOutputStream("Prova.tmp");
            
    ObjectOutputStream oos = new ObjectOutputStream(fos);
            
    oos.writeObject(new Agenda());
            
             
    FileInputStream fis = new FileInputStream("Prova.tmp");
            
    ObjectInputStream ois = new ObjectInputStream(fis);
            try{
            
    personale=(Agenda)ois.readObject();
            }catch(
    ClassNotFoundException e){
                
    System.out.print(e);
                }
            
    System.out.println(personale); //L'oggetto viene regolarmente stampato, quindi e stato letto senza errori dal file Prova.temp
        
    }
    }

    class 
    Agenda implements Serializable{
        

    Non viene fuori alcuna eccezione, quindi l'errore è altrove...

  7. #7

    problema persiste!

    Al di la di alcuni metodi che devo mettere a posto, ancora non va...
    Ho fatto come hai detto tu, il problema rimane purtroppo... la domanda è :
    se scrivo l'oggetto in Prova.tmp all'inizio del main come nel tuo codice, poi qunado è che va riscritto l'oggetto? io ho pensato chiaramente all'ultima istruzione prima dell'uscita dal main.
    e poi, ad ogni esecuzione, se la prima cosa che fa è scrivere sul file un oggeto new Agenda, va a sovrascrivere quello da me salvato nella sessione precedente oppure semplicemente gli da un identificazione?
    Se è cosi allora probabilmente ho sbagliato da qualche altra parte... accolgo volentieri suggerimenti su come implementare il tutto

  8. #8
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    L'oggeto potebbe essere riscritto prima della terminazione dell'applicazione che non si clocnlude necesariamente con la terminazione del metodo main, come avviene ad esempio se il programma ha interfaccia grafica. Il moi esempio è solo di prova per cui all'inizio del main scrivevo un nuovo oggetto Agenda nel file: ciò ovviamente causa la cancellazione di ciò che era precedentemente presente nel file. Se vuoi puoi mandarmi in privato tutto il codice in un allegato per individuare l'errore,

    ciao.

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.