Pagina 1 di 1
[Java] File corrente = new File(percorso); :(
Inviato: sabato 18 settembre 2010, 14:57
da zottiman
Codice: Seleziona tutto
public static String listaFile (String percorso){
String s="";
try{
File corrente = new File(percorso);
String elenco[] = corrente.list();
for(int i=0 ; i<elenco.length; i++){
File f = new File(elenco[i]);
if(f.isFile()){
s+= elenco[i] + ";";
}
}
}
catch(Exception e){
System.out.println(e);
}
return s;
}
Vi espongo il mio problema:
se io passo come stringa "." mi restituisce correttamente la lista dei file contenuti nella cartella in cui risiede il programma, se invece passo il percorso della cartella es. "C:\pippo" non funziona, cioè restituisce una stringa vuota.
Cosa devo fare per potermi spostare all'interno del disco come voglio?
grazie a tutti in anticipo dell'attenzione.
Re: [Java] File corrente = new File(percorso); :(
Inviato: sabato 18 settembre 2010, 15:02
da patel
segnala ad un moderatore di spostarti nella sez. programmazione
Re: [Java] File corrente = new File(percorso); :(
Inviato: sabato 18 settembre 2010, 15:12
da orion91
Attenzione con i caratteri di escape, il singolo \ è appunto un carattere di escape. Prova con C:\\pippo vedi che dovrebbe funzionare

Re: [Java] File corrente = new File(percorso); :(
Inviato: sabato 18 settembre 2010, 15:16
da zottiman
orion91 ha scritto:
Attenzione con i caratteri di escape, il singolo \ è appunto un carattere di escape. Prova con C:\\pippo vedi che dovrebbe funzionare
ho già provato ma non funziona.
Re: [Java] File corrente = new File(percorso); :(
Inviato: sabato 18 settembre 2010, 15:26
da orion91
Hai verificato anche con i metodo exist() e isDirectory()? Giusto per capire se proprio non lo trova..
Ho provate adesso sulla mia macchina questo codice, identico al tuo, e funziona perfettamente...
Codice: Seleziona tutto
File dir = new File("C:\\Downloads");
System.out.println("Directory esiste? " + dir.exists());
System.out.println("E' una directory? " + dir.isDirectory());
String[] elenco = dir.list();
for (int i= 0; i < elenco.length; i++) {
System.out.println("Elemento: " + elenco[i]);
}
Fatti stampare il percorso che arriva come parametro, magari ti sfugge qualcosa...
Re: [Java] File corrente = new File(percorso); :(
Inviato: sabato 18 settembre 2010, 15:31
da orion91
Scusa zottiman ho riletto adesso il tuo codice, mi sa che il problema è nel for.. non nel path. Guarda che il tuo elenco contiene solo il nome del file non il path completo. Per questo la stringa è vuota, quel file non esiste purtroppo. Con "." ti funziona proprio perché il path è sempre lo stesso, nel tuo caso devi controllare se esiste aggiungendo anche percorso..
Codice: Seleziona tutto
File f = new File(percorso + "\\" + elenco[i]);
if (f.isFile()) {
s+= elenco[i] + ";";
}
Vedi che così funziona, almeno dovrebbe!
Re: [Java] File corrente = new File(percorso); :(
Inviato: sabato 18 settembre 2010, 15:37
da zottiman
orion91 ha scritto:
Hai verificato anche con i metodo exist() e isDirectory()? Giusto per capire se proprio non lo trova..
Ho provate adesso sulla mia macchina questo codice, identico al tuo, e funziona perfettamente...
Codice: Seleziona tutto
File dir = new File("C:\\Downloads");
System.out.println("Directory esiste? " + dir.exists());
System.out.println("E' una directory? " + dir.isDirectory());
String[] elenco = dir.list();
for (int i= 0; i < elenco.length; i++) {
System.out.println("Elemento: " + elenco[i]);
}
Il tuo codice mi va perfettamente, lo sfrutto per modificare il mio. Grazie mille
Fatti stampare il percorso che arriva come parametro, magari ti sfugge qualcosa...
Re: [Java] File corrente = new File(percorso); :(
Inviato: sabato 18 settembre 2010, 15:43
da orion91
Prego fai pure.
Comunque il punto temo sia quello che ti ho detto, deve controllare il file anche con il path oppure, puoi usare il metodo listFiles() che ti ritorna un array di File, non un array di nomi come list(), e dopo per ciascuno controlli se isFile() ed ne stampi il nome con getName(), tutti e e tre sono metodi della classe File ovviamente.
Re: [Java] File corrente = new File(percorso); :(
Inviato: sabato 18 settembre 2010, 15:55
da zottiman
orion91 ha scritto:
Prego fai pure.
Comunque il punto temo sia quello che ti ho detto, deve controllare il file anche con il path oppure, puoi usare il metodo listFiles() che ti ritorna un array di File, non un array di nomi come list(), e dopo per ciascuno controlli se isFile() ed ne stampi il nome con getName(), tutti e e tre sono metodi della classe File ovviamente.
ho capito quel'è il problema. Praticamente con l' .isFile, non riconosce tutti i file, quindi devo dirgli che mi aggiunga alla lista tutto quello che non è directory. Avevo pensato ad una cosa tipo
Re: [Java] File corrente = new File(percorso); :(
Inviato: sabato 18 settembre 2010, 15:57
da orion91
Si potrebbe funzionare, insomma dovrebbe aggiungere alla lista tutto ciò che effettivamente non è una directory..
Prova e vedi un po cosa succede

Re: [Java] File corrente = new File(percorso); :(
Inviato: sabato 18 settembre 2010, 16:02
da zottiman
orion91 ha scritto:
Si potrebbe funzionare, insomma dovrebbe aggiungere alla lista tutto ciò che effettivamente non è una directory..
Prova e vedi un po cosa succede
Succede che non va niente... pfff .. mi tocca fare il controllo di ogni stringa, se contiene almeno un '.' vuol dire che non è una cartella e quindi lo stampo, altrimenti no.
Re: [Java] File corrente = new File(percorso); :(
Inviato: sabato 18 settembre 2010, 16:11
da orion91
Senti questo è strano.. ma la lista ti trovi? Insomma se non metti alcun filtro li vedi tutti i files e le cartelle che sono dentro la directory. Prima di fare questi controlli con le stringa fai un tentativo con listFiles(). Il for lo fai su array di File che questa funzione ritorna e poi controlli che non siano directory. Così deve funzionare per forza zottiman

Re: [Java] File corrente = new File(percorso); :(
Inviato: domenica 19 settembre 2010, 3:06
da zottiman
[quote="orion91"][/quote]
Allora:
Codice: Seleziona tutto
File dir = new File(percorso);
String[] elenco = dir.list();
for (int i= 0; i < elenco.length; i++) {
System.out.println(elenco[i]);
}
printa :
.DS_Store
.localized
3FE0D5E0DF66860FFECEEC5B1ACF7DF0E2860069.torrent
programmi
vdb
vlc-1.1.3.dmgvlc-1.1.3.dmg
Week-End Roverè Medio.m4v
Codice: Seleziona tutto
File dir = new File(percorso);
String[] elenco = dir.list();
for (int i= 0; i < elenco.length; i++) {
if(dir.isFile()){
System.out.println(elenco[i]);
}
}
printa:
*niente*
Codice: Seleziona tutto
File dir = new File(percorso);
String[] elenco = dir.list();
for (int i= 0; i < elenco.length; i++) {
if(dir.isDirectory()){
System.out.println(elenco[i]);
}
}
printa:
.DS_Store
.localized
3FE0D5E0DF66860FFECEEC5B1ACF7DF0E2860069.torrent
programmi
vdb
vlc-1.1.3.dmgvlc-1.1.3.dmg
Week-End Roverè Medio.m4v
Nel dubbio ho copiato il codice già fatto da quì:
http://www.java-tips.org/java-se-tips/java.io/list-the-names-of-all-files-in-a-particular-dire.html
Codice: Seleziona tutto
File folder = new File(percorso);
File[] listOfFiles = folder.listFiles();
for (int i = 0; i < listOfFiles.length; i++) {
if (listOfFiles[i].isFile()) {
System.out.println("File " + listOfFiles[i].getName());
} else if (listOfFiles[i].isDirectory()) {
System.out.println("Directory " + listOfFiles[i].getName());
}
}
così sembrerebbe andare perchè:
printa:
File .DS_Store
File .localized
File 3FE0D5E0DF66860FFECEEC5B1ACF7DF0E2860069.torrent
Directory programmi
Directory vdb
File vlc-1.1.3.dmgvlc-1.1.3.dmg
File Week-End Roverè Medio.m4v
togliendo il
Codice: Seleziona tutto
else if (listOfFiles[i].isDirectory()) {
System.out.println("Directory " + listOfFiles[i].getName());
}
dovrebbe farmi visualizzare solo i File.
Infatti printa:
File .DS_Store
File .localized
File 3FE0D5E0DF66860FFECEEC5B1ACF7DF0E2860069.torrent
File vlc-1.1.3.dmgvlc-1.1.3.dmg
File Week-End Roverè Medio.m4v
PERFETTO

(rotfl) (good)
Re: [Java] File corrente = new File(percorso); :(
Inviato: domenica 19 settembre 2010, 11:15
da orion91
Sono contento che hai risolto zottiman.
Alla fine la soluzione più semplice era proprio quella, usare l'array di File e non quello di stringhe.
Ciao e alla prossima
