In pratica i file salvati vengono creati come segue:
Stringa di riconoscimento (per verificare al caricamento che sia un file valido)
\n
\n
Cognome Nome
Telefono
Indirizzo
Città
\n
record successivo
I valori dei JTextField vengono salvati in oggetti di tipo MiaClasse e poi questi oggetti MiaClasse vengono inseriti in una ArrayList con list.add o list.set. Per il salvataggio del file non ho avuto problemi infatti il .txt viene creato correttamente, poi per il caricamento faccio leggere la prima stringa e se questa è uguale alla stringa di riconoscimento il file viene considerato valido altrimenti no e viene mostrato un messaggio e anke questo funziona; poi però qnd si tratta di leggere le stringhe successive(per reinserire i vari record nella lista e poterne aggiungere degli altri), dividere con la split() la stringa Cognome Nome succede il putiferio. Questo è il metodo che ho scritto per caricare i valori nella lista:
codice:
public static void carica(){
chooseopen = new JFileChooser();
//chooseopen.addChoosableFileFilter(new MyFilter());
int n = chooseopen.showOpenDialog(frame);
if(n == JFileChooser.APPROVE_OPTION)
try {
openfile(chooseopen.getSelectedFile());
} catch (IOException e) {
JOptionPane.showMessageDialog(frame, "Errore durante il caricamento del file.", "Errore", JOptionPane.ERROR_MESSAGE, new ImageIcon(Rubrica.class.getResource("warn.png")));
}
}//carica
Questo è il metodo che viene chiamato alla pressione del tasto Carica
codice:
public static void openfile(File f) throws IOException {
String lcogn;
String lnome;
String lnumb;
String laddr;
String lcity;
String empty;
String nomecogno;
String divido[] = new String[2];
String reco;
String temp;
ogg1 = new MiaClasse();
int line = 0;
list.clear();
FileReader file = new FileReader(f);
BufferedReader bufread = new BufferedReader(file);
reco = bufread.readLine();
if(reco.compareTo(rec) != 0) {
JOptionPane.showMessageDialog(frame, "File non valido.", "Errore", JOptionPane.ERROR_MESSAGE, new ImageIcon(Rubrica.class.getResource("warn.png")));
}
else if(reco.compareTo(rec) == 0) {
JOptionPane.showMessageDialog(frame, "Rubrica caricata con successo.", "Caricamento effettuato.", JOptionPane.INFORMATION_MESSAGE, new ImageIcon(Rubrica.class.getResource("ok.png")));
try{
while (bufread.ready()){
if(line >= 3){
nomecogno = bufread.readLine();
lnumb = bufread.readLine();
laddr = bufread.readLine();
lcity = bufread.readLine();
empty = bufread.readLine();
divido = nomecogno.split(" ");
lcogn = divido[0];
lnome = divido[1];
ogg1.cogn = lcogn;
ogg1.nome = lnome;
ogg1.numb = lnumb;
ogg1.addr = laddr;
ogg1.city = lcity;
list.add(ogg1);
}//if
else temp = bufread.readLine();
line++;
}//while
}
catch(IOException e){
System.out.println("maialone");
}
}
}//openfile
Questo invece quello vero e proprio per caricare i valori presenti nel .txt nella lista.
Questi sono gli errori:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
at Rubrica.openfile(Rubrica.java:196)
at Rubrica.carica(Rubrica.java:154)
at Rubrica.inizio(Rubrica.java:142)
at Rubrica.<init>(Rubrica.java:43)
at Rubrica.main(Rubrica.java:534)
Il programma va liscio fino a quando, appena dopo aver selezionato il file da caricare, mi visualizza il messagedialog che mi avvisa che il file è stato caricato con successo e poi escono quelli!