Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2002
    Messaggi
    655

    [JAVA] problema sostituzione oggetto

    Scrivo un oggetto su di un File una mia struttura dati Libro che č contenuta in una HashMap
    class Libro implements Serializable{..}
    ..
    public class Archivio{
    private static HashMap dbConti= new HashMap();
    public Archivio
    {Tramite il costruttore inserisco i libri nella HashMap}
    public static void scriviFile()
    {
    try{
    FileOutputStream fos = new FileOutputStream("info.dat");
    ObjectOutputStream oos = new ObjectOutputStream(fos);
    oos.writeObject(dbConti);
    oos.flush();
    oos.close();
    }
    catch(FileNotFoundException e){}
    catch(IOException e){}
    }

    public static HashMap carica()
    {
    try{
    FileInputStream fis = new FileInputStream("info.dat");
    ObjectInputStream ois = new ObjectInputStream(fis);
    HashMap dbConti = (HashMap)ois.readObject();
    ois.close();
    fis.close();

    }
    catch(ClassNotFoundException e){}
    catch(IOException e){}
    return dbConti;
    }
    Il problema č che poi non riesco a utilizzare(scambiare) l'oggetto dbconti che ottengo, all'esterno l'oggetto lo vedo come vuoto!

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2002
    Messaggi
    655
    Una soluzione sarebbe quella di rendere il metodo carica() void ed andare solo ad incrementare l'indice della chiave hash della mappa precedente, ma non credo che sia molto elegante no?

  3. #3
    Primo: non usare lo stesso nome per un membro della classe e una variabile locale. Se no capitano errori di cui non riesci ad accorgerti...

    Il dbConti ritornato da carica() e' quello della classe stessa. QUello che hai dicharato nel blocco try ormai e' fuori visibilita'.
    Quindi, correggi cosi':

    public static HashMap carica() {
    HashMap dbConti=null;
    try{
    FileInputStream fis = new FileInputStream("info.dat");
    ObjectInputStream ois = new ObjectInputStream(fis);
    dbConti = (HashMap)ois.readObject();
    ois.close();
    fis.close();

    } catch(ClassNotFoundException e){
    e.printStackTrace();
    } catch(IOException e){
    e.printStackTrace();}
    return dbConti;
    }
    Folle e' l'uomo che parla alla luna.
    Stolto chi non le presta ascolto.

  4. #4
    Utente di HTML.it L'avatar di floyd
    Registrato dal
    Apr 2001
    Messaggi
    3,837
    ma se lo dichiari nel metodo alla fine lui muore

    FileInputStream fis = new FileInputStream("info.dat");
    ObjectInputStream ois = new ObjectInputStream(fis);
    dbConti = (HashMap)ois.readObject();
    ois.close();
    fis.close();

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2002
    Messaggi
    655
    Infatti ho risolto facendogli ritornare un oggetto HashMap.
    Ora se volessi contare quanti oggetti sono contenuti nell'oggetto caricato una cosa simile cosa mi restituirebbe?
    codice:
    ObjectInputStream ois = new ObjectInputStream(fis);
    Integer nro = (Integer)ois.readObject();

  6. #6
    UN errore, a meno che quell'Integer non si trovi nel file.
    Folle e' l'uomo che parla alla luna.
    Stolto chi non le presta ascolto.

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2002
    Messaggi
    655
    Quindi non c'č modo di sapere da quanti oggetti č formato quell'oggetto, so solo che ho 1 oggetto?

  8. #8
    Fino a quando non lo leggi, no. Anzi non sai neanche che ce n'e' uno solo, o meglio, lo sai solo perche' sei tu che ce ne hai messo uno.
    COme ti ho detto, puoi far si' che il valore che cerchi si trovi nel file, modificando la procedura di scrittura in modo da includere la dimensione prima della HashTable.
    Folle e' l'uomo che parla alla luna.
    Stolto chi non le presta ascolto.

  9. #9
    Utente di HTML.it
    Registrato dal
    Jul 2002
    Messaggi
    655
    Ho risolto prendendo la dimensione della HashMap

  10. #10
    Utente di HTML.it
    Registrato dal
    Jul 2002
    Messaggi
    655
    Ho risolto prendendo la dimensione della HashMap

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 © 2024 vBulletin Solutions, Inc. All rights reserved.