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