Visualizzazione dei risultati da 1 a 10 su 15

Visualizzazione discussione

  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2013
    Messaggi
    24

    [Java] Problema con gli iterator e la serializzazione

    Salve a tutti ho iniziato a studiare java da un po di tempo e per "allenamento studio" sto provando a scrivere una piccola applicazione di gestione di un archivio.
    La mia idea era che l'archivio potesse essere serializzato e salvato in memoria per poi deserializzarlo di volta in volta per effettuare dell operazioni su di esso aggiunta e rimozione di voci all'archivio e stampa su pdf degli elementi dell archivio...per la aggiunta e la ricerca nessun problema il mio problema nasce con la rimozione..
    questa sono le mie classi per la gestione dell archvio
    codice:
    package Archivio; 
    
    import com.itextpdf.text.BaseColor;
    import java.util.ArrayList;
    import java.io.*;
    import com.itextpdf.text.pdf.PdfWriter;
    import com.itextpdf.text.Document;
    import com.itextpdf.text.DocumentException;
    import com.itextpdf.text.Paragraph;
    import com.itextpdf.text.Font;
    import com.itextpdf.text.Font.FontFamily;
    import java.util.Collections;
    import javax.swing.JTextArea;
    import java.util.Iterator;
    public class Archivio implements Serializable {
         private static final long serialVersionUID= 1L;
        protected ArrayList<VoceArchivio> archivio;
        public Archivio(){
        archivio= new ArrayList<VoceArchivio>();
        }
        /**
         * metodo per inserire un elemento nell archivio
         * @param v un elemento per  l'archivio
         */
        public void addVoceArchivio(VoceArchivio v){
            archivio.add(v);
        } 
        /**
         * metodo per eliminare un elemento dall archivio
         *  @param v elemento da eliminare
         */
        public void removeVoceArchivio(VoceArchivio v){
            Iterator<VoceArchivio> it = archivio.iterator();
            while(it.hasNext()){
             VoceArchivio a = it.next();
               if(a.equals(v))
               it.remove();
           }
        }
        
        public void stampaArchivio(String fileArchvio){
            Collections.sort(archivio);
            (...)
        }
    }
    le due classi che serializzano e deserialiazzano l'archvio sono
    codice:
    package Archivio;
    import java.io.*;
    /**
     * Questa classe legge da file e deserializza un archvio inserendo le voci in un archvio 
     */
    public class DeserializzaArchivio {
        private Archivio archivio;
        final String nomeFile="archivio.dat";
         
        public DeserializzaArchivio(){
            
            try{
               ObjectInputStream input = new ObjectInputStream(new FileInputStream(nomeFile));
                archivio =(Archivio) input.readObject();
                input.close();
            }
            catch (FileNotFoundException e) 
            {
                System.out.println("");
            }
            
            catch (IOException e) {
                System.out.println(e);
            }
            catch (ClassNotFoundException e){
                System.out.println(e);
            }
           
        }
        public Archivio getArchivio(){
            return archivio;
        }
    }
    
    
    package Archivio;
    import java.io.*;
    public class SerializzaArchivio {
        final String nomeFile="archivio.dat";
        public  SerializzaArchivio(Archivio archivio){
            ObjectOutputStream output;
            try{
                output = new ObjectOutputStream(new FileOutputStream(nomeFile)); 
                output.writeObject(archivio);
                output.close();
            }
             catch (FileNotFoundException e) 
            {
                System.out.println(e);
            }
            catch (IOException e) {
                System.out.println(e);
            }
        }
    }
    Quando provo l'archivio

    codice:
    package Archivio;
    
    
    public class archvioprova {
        public static void main (String []args){
            CD cd1 = new CD ("provacd1","provacd1",10,true,10,"commento1");
            CD cd2 = new CD ("provacd2","provacd2",10,true,10,"commento2");
            DVD dvd1 = new DVD("provadvd1","prova",10,true,"prova");
            //CD e DVD sono classi derivate della classe padre VoceAchivio non penso serva che posti             //anke il loro codice ma nel caso lo faccio
            Archivio archivio = new Archivio();
            archivio.addVoceArchivio(cd1);
            archivio.addVoceArchivio(cd2);
            archivio.addVoceArchivio(dvd1);
            
            //se applico i metodi senza serializzare l'archvio
            archivio.stampaArchivio("totale");
            archivio.removeVoceArchivio(cd2);
            archivio.stampaArchivio("parziale");
            //in questo caso fa quello che ho in mente cioè elimina cd2 e quando creo
            //il pdf parziale il cd2 non risulta + nell archvio
            
            //se invece prima serializzo
            SerializzaArchivio sa = new SerializzaArchivio(archivio);
            DeserializzaArchivio da = new DeserializzaArchivio();
            da.getArchivio().stampaArchivio("tot");
            //fin qui tutto bene
            da.getArchivio().removeVoceArchivio(cd2);
            da.getArchivio().stampaArchivio("parz");
            //quando creo "parz"  e lo apro  in questo caso non succede niente!!(il cd2 non viene cancellato)
            }
    }
    Credo che il problema sia in un "conflitto" tra gli iterator del metodo removeVoceArchvio e la serializzazione dell archivio spero possiate aiutarmi perchè è un paio di giorni che non riesco a
    trovare una soluzione
    PS scusate sono stato prolisso ma volevo essere chiaro se il post viola qualke regolamento proverò a riscriverlo in maniera + riaussuntiva
    Ultima modifica di kekkuz87; 16-12-2013 a 20:20

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.