PDA

View Full Version : [JAVA] - Array di File


pa_co
23-01-2009, 11:49
Ciao a tutti, è un po che ci lavoro su, ma non ho trovato soluzione a questo mio problema che vi espongo.
Ho due liste di file:

File f1 = new File("c:/prova");
File f2 = new File("c:/prova2");

File file1[]= f1.listFiles();
File file2[]= f2.listFiles();

Vorrei avere una nuova lista di File (File unionFile[];) che sia l'unione tra le due. Non esiste un comando tipo l'append tra le stringhe? E se no come posso fare a risolvere questo mio problema.
Spero che qualcuno sappia aiutarmi.
Grazie

fero86
23-01-2009, 12:23
non so se armeggiando con le collections é possibile risolvere in maniera piu facile, comunque questa é la soluzione manuale:

File[] unioneFile = new File[file1.length + file2.length];
System.arraycopy(file1, 0, unioneFile, 0, file1.length);
System.arraycopy(file2, 0, unioneFile, file1.length, file2.length);

incipit1970
23-01-2009, 15:15
La risposta di fero86 è validissima, ma se hai un numero imprecisato di array da unire diventerebbe complicato gestirla (ad esempio, se devi cercare in tante sottocartelle e fare una lista di tutti i file da elaborare). Usare le collection è senz'altro più conveniente:


List<File> unioneFile = new ArrayList<File>();

// Ora puoi caricare i risultati dei listFiles() sulla lista
// Puopi fare tanti addAll() secondo le tue logiche, tutti i file
// nel array passato in parametro vengono aggiunti alla lista
unioneFile.addAll(Arrays.asList(f1.listFiles()));

// Per percorrere la lista
for (Iterator i = unioneFile.iterator(); i.hasNext(); ) {
File file = i.next();
// Qui puoi fare quello che devi fare con ognuno dei file della lista
System.out.println(file.getName());
}

// Oppure converti la lista in un array:
File[] risultato = unioneFile.toArray(new File[1]);


N.B.: In questo caso ho usato i generics per la lista, quindi serve Java 1.5 o superiore.

astorcas
23-01-2009, 15:36
La risposta di fero86 è validissima, ma se hai un numero imprecisato di array da unire diventerebbe complicato gestirla (ad esempio, se devi cercare in tante sottocartelle e fare una lista di tutti i file da elaborare). Usare le collection è senz'altro più conveniente:


List<File> unioneFile = new ArrayList<File>();

// Ora puoi caricare i risultati dei listFiles() sulla lista
// Puopi fare tanti addAll() secondo le tue logiche, tutti i file
// nel array passato in parametro vengono aggiunti alla lista
unioneFile.addAll(Arrays.asList(f1.listFiles()));

// Per percorrere la lista
for (Iterator i = unioneFile.iterator(); i.hasNext(); ) {
File file = i.next();
// Qui puoi fare quello che devi fare con ognuno dei file della lista
System.out.println(file.getName());
}

// Oppure converti la lista in un array:
File[] risultato = unioneFile.toArray(new File[1]);


N.B.: In questo caso ho usato i generics per la lista, quindi serve Java 1.5 o superiore.

Così vengono ignorati i duplicati?

banryu79
23-01-2009, 16:05
Così vengono ignorati i duplicati?
Naturalmente no: stiamo usando una List e non un Set.

astorcas
23-01-2009, 16:58
Naturalmente no: stiamo usando una List e non un Set.

Ehm si scusa credevo si riferisse all'unione fra insiemi e volevo fare il sarcastico... invece ho fatto l'idiota :fagiano:

banryu79
23-01-2009, 17:04
Ehm si scusa credevo si riferisse all'unione fra insiemi e volevo fare il sarcastico... invece ho fatto l'idiota :fagiano:
Non l'ho mica capita :D

astorcas
23-01-2009, 17:12
Non l'ho mica capita :D


Vorrei avere una nuova lista di File (File unionFile[] che sia l'unione tra le due....


Credevo lui volesse questa (http://it.wikipedia.org/wiki/Unione_(insiemistica)) unione.... insomma disgiunta, vabbè lascia stare è venerdi sera!