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

    [JAVA] Da TreeSet a File e viceversa

    Ciao,
    ho una struttura dati di tipo TreeSet che contiente oggetti di tipo Studente
    [Studente è una classe che contiene vari campi di cui anche un campo di tipo TreeSet all'interno].

    Vorrei copiare il contenuto di TreeSet su File e viceversa. Dopo varie ricerche ho capito che il primo passo da fare è rendere serializable la classe Studente. Giusto?
    Qualche consiglio please su come passare da TreeSet a File?
    Grazie

  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Terzo risultato di google per "serializzazione java": http://www.dse.disco.unimib.it/slide...one%20Java.pdf
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [JAVA] Da TreeSet a File e viceversa

    Originariamente inviato da coocooche
    Dopo varie ricerche ho capito che il primo passo da fare è rendere serializable la classe Studente. Giusto?
    Sì, deve implementare innanzitutto Serializable e ciò a cui fa riferimento l'oggetto Studente dovrebbe essere a sua volta serializzabile (String, Integer ecc.. lo sono già per default, per altri tipi bisogna vedere).
    Se una parte dello "stato" dell'oggetto non è serializzabile e non puoi/vuoi renderlo tale, puoi ancora rendere serializzabile un Studente ma devi "entrare" nel processo di serializzazione implementando dei metodi privati nella tua classe.
    A riguardo trovi comunque documentazione in rete.

    Originariamente inviato da coocooche
    Qualche consiglio please su come passare da TreeSet a File?
    Non è un passaggio da un tipo ad un altro .... devi usare FileOutputStream (che può anche ricevere un java.io.File per il nome) e questo stream lo devi incapsulare in un ObjectOutputStream (che "sa" come serializzare gli oggetti tramite writeObject() ).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #4
    @Alex'87, lo avevo letto e devo ammetere che per essere alle prime armi con la serializzazione, quel documento non ti offre piu' di quello che ti offre wikipedia cmq grazie, prendo sempre in considerazione la ricerca prima di chiedere dei consigli.
    Allora considerando che ho due TreeSet "studenti" e "esami" che mi contengono rispettivamente oggetti di tipo "Studente" e "Esame", ho dovuto renderli serializable implementando l'interfaccia java.io.Serializable. Poi qua sotto posto il metodo che ho scritto per salvare in due file distinti il contenuto dei TreeSet "studenti" e "esami"!
    Codice PHP:
    void salvaDati() {
          
    FileOutputStream foutEsami;
          
    FileOutputStream foutStudenti;

          
    ObjectOutputStream oose null;
          
    ObjectOutputStream ooss null;
          try {
           
    // apertura dello stream di output (supporto di persistenza)
           
    foutEsami = new FileOutputStream("esami.txt");
           
    foutStudenti = new FileOutputStream("studenti.txt");
                try {
                    
    // apertura dello stream di serializzazione
                    
    oose = new ObjectOutputStream(foutEsami);
                    
    ooss = new ObjectOutputStream(foutStudenti);
                } catch (
    IOException ex) {
                    
    Logger.getLogger(AnagraficaFile.class.getName()).log(Level.SEVEREnullex);
                }
                try {
                    
    // scrittura su file della sequenza di byte rappresentativa dello stato dell’oggetto
                    
    oose.writeObject(esami);
                    
    ooss.writeObject(studenti);
                } catch (
    IOException ex) {
                    
    Logger.getLogger(AnagraficaFile.class.getName()).log(Level.SEVEREnullex);
                }
                try {
                    
    // chiusure
                    
    oose.close();
                    
    ooss.close();
                    
    foutEsami.close();
                    
    foutStudenti.close();

                } catch (
    IOException ex) {
                    
    Logger.getLogger(AnagraficaFile.class.getName()).log(Level.SEVEREnullex);
                }
           
    System.out.println ("Salvataggio in File riuscito con successo!");
         } catch (
    FileNotFoundException ex) {
              
    System.out.println ("Salvataggio in File non riuscito" ex );
              
    Logger.getLogger(AnagraficaFile.class.getName()).log(Level.SEVEREnullex);
           }
       } 
    Adesso faccio la deserializzazione, ovvero un metodo inverso di quello sopra!
    Grazie

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da coocooche
    Codice PHP:
    foutEsami = new FileOutputStream("esami.txt");
    foutStudenti = new FileOutputStream("studenti.txt"); 
    Solo un piccolo appunto. Il file generato dalla serializzazione non è "di testo" ... ma è binario. Quindi una estensione .txt non è effettivamente la più appropriata.
    E non pensare di poter aprire quei file con un qualunque editor di testo, non vedresti nulla di sensato/utile.

    Piccolissima nota: la gestione delle eccezioni e sopratutto le chiusure che hai fatto non è completa/appropriata al 100%. Valuta il fatto di mettere magari un metodo che "incapsula" la apertura del file, serializzazione, chiusura, ecc...

    Originariamente inviato da coocooche
    Adesso faccio la deserializzazione, ovvero un metodo inverso di quello sopra!
    Le classi "inverse" di quelle che hai usato: FileInputStream e ObjectInputStream (readObject() ).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Originariamente inviato da andbin
    Solo un piccolo appunto. Il file generato dalla serializzazione non è "di testo" ... ma è binario. Quindi una estensione .txt non è effettivamente la più appropriata.
    E non pensare di poter aprire quei file con un qualunque editor di testo, non vedresti nulla di sensato/utile.
    Veramente ho notato il metodo "writeUTF(String)" della classe ObjectOutputStream() per scrivere su file in formato utf-8 ma non fa al caso mio. Cmq non mi interessa tanto vedere in chiaro.

    Piccolissima nota: la gestione delle eccezioni e sopratutto le chiusure che hai fatto non è completa/appropriata al 100%. Valuta il fatto di mettere magari un metodo che "incapsula" la apertura del file, serializzazione, chiusura, ecc...
    Come hai notato sono delle eccezioni consigliati/generati dal IDE. Per adesso (fase di sperimentazione) non saprei come migliorarlo e non ci arrivo neanche al tuo consiglio, sorry

    Le classi "inverse" di quelle che hai usato: FileInputStream e ObjectInputStream (readObject() ).
    Ecco il metodo messo su per la deserializzazione (ancora da testare):
    Codice PHP:
    void caricaDati() {
          
    FileInputStream finEsami;
          
    FileInputStream finStudenti;

          
    ObjectInputStream oise null;
          
    ObjectInputStream oiss null;

          try {
                
    finEsami = new FileInputStream("esami.txt");
                
    finStudenti = new FileInputStream("studenti.txt");
                
                
    oise = new ObjectInputStream(finEsami);
                
    oiss = new ObjectInputStream(finStudenti);
                try {
                   
    esami = (TreeSetoise.readObject();
                   
    studenti=(TreeSetoiss.readObject();
                } catch (
    ClassNotFoundException ex) {
                    
    Logger.getLogger(AnagraficaFile.class.getName()).log(Level.SEVEREnullex);
                }
                
    finEsami.close();
                
    finStudenti.close();
                
    oise.close();
                
    oiss.close();
            
    System.out.println ("Recupero File riuscito con successo!");
          } catch (
    IOException e) {
                
    System.out.println ("Recupero File non riuscito" e);
          }
        } 

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.