[Java] File corrente = new File(percorso); :(

Il ritrovo della comunità dove confrontarsi e discutere sulle notizie dal mondo dell'informatica, di Ubuntu e di tutto quello che la riguarda, novità, pettegolezzi e quant'altro.
Scrivi risposta
zottiman
Prode Principiante
Messaggi: 67
Iscrizione: sabato 11 luglio 2009, 2:03

[Java] File corrente = new File(percorso); :(

Messaggio 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.
patel
Accecante Asceta
Accecante Asceta
Messaggi: 23782
Iscrizione: martedì 15 aprile 2008, 20:27
Località: Livorno

Re: [Java] File corrente = new File(percorso); :(

Messaggio da patel »

segnala ad un moderatore di spostarti nella sez. programmazione
Un titolo ben azzeccato attira l'attenzione degli esperti in quel campo, fa risparmiare tempo a voi, aumenta la probabilità di successo.
Avatar utente
orion91
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 802
Iscrizione: sabato 16 aprile 2005, 18:43
Località: Napoli
Contatti:

Re: [Java] File corrente = new File(percorso); :(

Messaggio da orion91 »

Attenzione con i caratteri di escape, il singolo \ è appunto un carattere di escape. Prova con C:\\pippo vedi che dovrebbe funzionare  ;)
Ubuntu User N° 120
Linux Counter User N° 392961
zottiman
Prode Principiante
Messaggi: 67
Iscrizione: sabato 11 luglio 2009, 2:03

Re: [Java] File corrente = new File(percorso); :(

Messaggio 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.
Avatar utente
orion91
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 802
Iscrizione: sabato 16 aprile 2005, 18:43
Località: Napoli
Contatti:

Re: [Java] File corrente = new File(percorso); :(

Messaggio 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...
Ubuntu User N° 120
Linux Counter User N° 392961
Avatar utente
orion91
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 802
Iscrizione: sabato 16 aprile 2005, 18:43
Località: Napoli
Contatti:

Re: [Java] File corrente = new File(percorso); :(

Messaggio 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!
Ubuntu User N° 120
Linux Counter User N° 392961
zottiman
Prode Principiante
Messaggi: 67
Iscrizione: sabato 11 luglio 2009, 2:03

Re: [Java] File corrente = new File(percorso); :(

Messaggio 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...
Avatar utente
orion91
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 802
Iscrizione: sabato 16 aprile 2005, 18:43
Località: Napoli
Contatti:

Re: [Java] File corrente = new File(percorso); :(

Messaggio 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.
Ubuntu User N° 120
Linux Counter User N° 392961
zottiman
Prode Principiante
Messaggi: 67
Iscrizione: sabato 11 luglio 2009, 2:03

Re: [Java] File corrente = new File(percorso); :(

Messaggio 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

Codice: Seleziona tutto

if(!dir.isDirectory){
    s+=elemento[i];
}
Avatar utente
orion91
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 802
Iscrizione: sabato 16 aprile 2005, 18:43
Località: Napoli
Contatti:

Re: [Java] File corrente = new File(percorso); :(

Messaggio da orion91 »

Si potrebbe funzionare, insomma dovrebbe aggiungere alla lista tutto ciò che effettivamente non è una directory..
Prova e vedi un po cosa succede ;)
Ubuntu User N° 120
Linux Counter User N° 392961
zottiman
Prode Principiante
Messaggi: 67
Iscrizione: sabato 11 luglio 2009, 2:03

Re: [Java] File corrente = new File(percorso); :(

Messaggio 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.
Avatar utente
orion91
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 802
Iscrizione: sabato 16 aprile 2005, 18:43
Località: Napoli
Contatti:

Re: [Java] File corrente = new File(percorso); :(

Messaggio 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 ;)
Ubuntu User N° 120
Linux Counter User N° 392961
zottiman
Prode Principiante
Messaggi: 67
Iscrizione: sabato 11 luglio 2009, 2:03

Re: [Java] File corrente = new File(percorso); :(

Messaggio 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  ;D  (rotfl) (good)
Avatar utente
orion91
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 802
Iscrizione: sabato 16 aprile 2005, 18:43
Località: Napoli
Contatti:

Re: [Java] File corrente = new File(percorso); :(

Messaggio 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 ;)
Ubuntu User N° 120
Linux Counter User N° 392961
Scrivi risposta

Ritorna a “Bar Ubuntu”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 8 ospiti