2013-03-18 24 views
18

Desidero poter elencare i file nella directory corrente. Ho realizzato qualcosa che dovrebbe funzionare ma non restituisce tutti i nomi dei file.Come elencare i file nella directory corrente?

File dir = new File("."); 
File[] filesList = dir.listFiles(); 
for (File file : filesList) { 
    if (file.isFile()) { 
     System.out.println(file.getName()); 
    } 
} 

Riporta .classpath, ma sono abbastanza sicuro ho altri file Java all'interno di questa cartella. Forse la notazione dei punti per la cartella corrente non è corretta?

+1

* "sono abbastanza sicuro di avere altri file Java all'interno di questa cartella" * loro nome (in modo che possiamo essere più sicuro). –

+1

Non vedo niente di sbagliato con il tuo codice e il tuo output. – Maroun

+0

Si prega di fornire un elenco di uno strumento analogo, come dir su windows o ls -l su unix, per il confronto. – Ingo

risposta

8

Forse la notazione dei punti per la cartella corrente non è corretta?

Stampa il risultato di File.getCanonicalFile() per verificare il percorso.

Qualcuno può spiegarmi perché src non è la cartella corrente?

L'IDE sta impostando il percorso di classe quando si richiama la JVM.

E.G. (raggiunge per Netbeans) Se si selezionano i menu File | Project Properties (all classes) si potrebbe vedere qualcosa di simile a:

Netbeans project options

E 'il Working Directory che è di interesse qui.

1

È necessario verificare che new File(".") è davvero indicando al punto in cui si pensa che sta puntando - .classpath suggerisce la radice di qualche progetto Eclipse ....

+11

* "Si dovrebbe .." * Si dovrebbe rendere questo un commento. –

17

Prova questo, per recuperare tutti i file all'interno della cartella e sottocartella

public static void main(String[]args) 
    { 
     File curDir = new File("."); 
     getAllFiles(curDir); 
    } 
    private static void getAllFiles(File curDir) { 

     File[] filesList = curDir.listFiles(); 
     for(File f : filesList){ 
      if(f.isDirectory()) 
       getAllFiles(f); 
      if(f.isFile()){ 
       System.out.println(f.getName()); 
      } 
     } 

    } 

per recuperare i file/cartelle solo

public static void main(String[]args) 
    { 
     File curDir = new File("."); 
     getAllFiles(curDir); 
    } 
    private static void getAllFiles(File curDir) { 

     File[] filesList = curDir.listFiles(); 
     for(File f : filesList){ 
      if(f.isDirectory()) 
       System.out.println(f.getName()); 
      if(f.isFile()){ 
       System.out.println(f.getName()); 
      } 
     } 

    } 
+0

Suppongo che l'utente stia dicendo che vuole stampare tutti i file presenti nella 'directory corrente'. Non nelle sottodirectory !! –

+0

grazie al lavoro ... – saman

1

Aveva un rapido snoop intorno per questo, ma questo sembra sh potrebbe funzionare Non l'ho ancora provato però.

File f = new File("."); // current directory 

    File[] files = f.listFiles(); 
    for (File file : files) { 
     if (file.isDirectory()) { 
      System.out.print("directory:"); 
     } else { 
      System.out.print("  file:"); 
     } 
     System.out.println(file.getCanonicalPath()); 
    } 
0

Non c'è niente di sbagliato nel codice. Dovrebbe elencare tutti i file e le directory direttamente contenuti nella directory indicata.

Il problema è molto probabilmente uno dei seguenti modi:

  • La directory "." non è quello che ci si aspetta che sia. Il nome di percorso "." indica effettivamente "directory corrente" o "directory di lavoro" per JVM. È possibile verificare quale directory è in realtà "." stampando dir.getCanonicalPath().

  • Si sta fraintendendo cosa restituisce dir.listFiles(). Non restituisce tutti gli oggetti nell'albero sotto dir. Restituisce solo oggetti (file, directory, collegamenti simbolici, ecc.) Che sono direttamente in dir.

Il file ".classpath" suggerisce che si sta guardando una directory del progetto Eclipse, e progetti Eclipse sono normalmente configurato con i file Java in una sottodirectory, come "./src". Non mi aspetto di vedere alcun codice sorgente Java nella directory ".".


Qualcuno può spiegare a me perché src non è la cartella corrente?"

Supponendo che si sta avviando un'applicazione in Eclipse, quindi la cartella corrente default al progetto directory È possibile modificare la directory corrente predefinita tramite uno dei pannelli nella procedura guidata di configurazione Launcher

+0

ripubblicazione del mio altro commento, "Penso di aver trovato il problema. Supponevo che la directory corrente fosse nella cartella src (eclipse) ma in realtà la notazione puntata punta alla cartella all'esterno dello src Tuttavia, la cartella src è la cartella in cui sono salvati i miei file, quindi ho pensato che fosse la cartella corrente Qualcuno può spiegarmi perché src non è la cartella corrente? " – Martynogea

0

Il codice fornisce il risultato previsto, se si compila ed esegue il codice standalone (da riga di comando). Come in eclipse per ogni progetto, la directory di lavoro predefinita è la directory del progetto, ecco perché ottieni questo risultato.

È possibile impostare user.dir proprietà in Java come:

System.setProperty("user.dir", "absolute path of src folder"); 

allora darà risultato atteso.

+0

Ummm ...questo non funzionerà Non c'è modo di cambiare ciò che 'new File (". ")' Significa in puro Java. –

+0

Riferimento: http://stackoverflow.com/questions/840190/changing-the-current-working-directory-in-java –

0

Ho usato questa risposta con la mia directory locale (ad esempio E://) è funzionata bene per la prima directory e per la seconda directory l'output ha generato un'eccezione di puntatore nullo java, dopo aver cercato il motivo ho scoperto che il problema era creato dalla directory nascosta, e questo elenco è stato creato da finestre per evitare questo problema basta usare questo

public void recursiveSearch(File file) { 
File[] filesList = file.listFiles(); 
    for (File f : filesList) { 
     if (f.isDirectory() && !f.isHidden()) { 
      System.out.println("Directoy name is -------------->" + f.getName()); 
      recursiveSearch(f); 
     } 
     if(f.isFile()){ 
      System.out.println("File name is -------------->" + f.getName()); 
     } 
    } 
} 
Problemi correlati