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
le due classi che serializzano e deserialiazzano l'archvio sonocodice: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); (...) } }
Quando provo l'archiviocodice: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); } } }
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 acodice: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) } }
trovare una soluzione
PS scusate sono stato prolisso ma volevo essere chiaro se il post viola qualke regolamento proverò a riscriverlo in maniera + riaussuntiva

Rispondi quotando

non andasse in tutte due i casi capirei ma così non riesco proprio a capirlo
