Salve ragazzi dovrei copiare file di una cartella e delle sue sottocartelle escludendo alcune estensioni.
Salve ragazzi dovrei copiare file di una cartella e delle sue sottocartelle escludendo alcune estensioni.
Sposto nel forum dedicato a Java.
Ciao.
"Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza
dovrei copiare solo alcune tipologie di file ed escludere altre e mantenere la stessa struttura delle sottocartelle.
La cosa non è complessa: puoi scrivere un metodo ricorsivo che prende come parametri un oggetto File che rappresenta la directory sorgente e un oggetto File che rappresenta la directory destinazione. All'interno recuperi l'elenco dei file della directory sorgente e con un banale ciclo for li scorri tutti (e qui puoi già applicare il filtro per estensione).
Se l'i-esimo elemento è una directory, richiami ricorsivamente il metodo (passando i parametri corretti), altrimenti se è un file lo copi.
Per la copia di un singolo file scriverai una funzioncina che verifica se il path destinazione esiste (se non esiste, lo crei). Poi puoi usare le api NIO o scrivere manualmente il codice di copia (anch'esso piuttosto banale).
I metodi della classe File che ti tornano utili sono:
listFiles(FileFilter filter)
isDirectory()
getName()
Ciao.
"Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza
un po complicata la cosa per me...
Per trovare ad esempio tutti i PDF in una directory, è sufficiente:
codice:File dir = new File("C:\\blabla"); File[] elementi = dir.listFiles(new FileFilter() { @Override public boolean accept(File f) { return f.isDirectory() || (f.isFile() && f.getName().toLowerCase().endsWith(".pdf")); } }); for (File elemento : elementi) { // usa elemento ...... }
La implementazione del FileFilter (fatta con una anonymous inner-class) "accetta" solo i file con estensione .pdf (maiuscolo/minuscolo che sia) PIU' qualunque directory.
Il fatto di accettare anche le directory non servirebbe se dovessi solo elaborare una singola directory. Ma è ovviamente necessario se volessi scansionare in "profondità" il file-system tramite approccio ricorsivo.
Poi naturalmente si possono fare varianti, ad esempio prendere prima solo tutti i file interessati e poi con un altro listFiles prendere solo le directory per andare più in profondità.
perfetto nel mio caso devo prendere tutto tranne i pdf