2013-02-03 13 views
41

Eventuali duplicati:
List all files from a directory recursively with Javalista di tutti i file presenti nella cartella e anche sottocartelle

Come posso restituire un array di file che includono tutti i file della cartella e anche sottocartelle mia il metodo funziona solo per la cartella e non include le sottocartelle.

public File[] listf(String directoryName) { 

    // .............list file 
    File directory = new File(directoryName); 

    // get all the files from a directory 
    File[] fList = directory.listFiles(); 

    for (File file : fList) { 
     if (file.isFile()) { 
      System.out.println(file.getAbsolutePath()); 
     } else if (file.isDirectory()) { 
      listf(file.getAbsolutePath()); 
     } 
    } 
    System.out.println(fList); 
    return fList; 
}       
+5

È possibile utilizzare 'FileUtils' – Maroun

+0

Rimuovere il blocco che verifica se si tratta di una sottodirectory? –

+2

FileUtils.listFiles (dir, new String [] {". Xml"}, true) ... in apache-commons – user2069723

risposta

61

Utilizzando si codice attuale, rendono questo tweak:

public void listf(String directoryName, ArrayList<File> files) { 
    File directory = new File(directoryName); 

    // get all the files from a directory 
    File[] fList = directory.listFiles(); 
    for (File file : fList) { 
     if (file.isFile()) { 
      files.add(file); 
     } else if (file.isDirectory()) { 
      listf(file.getAbsolutePath(), files); 
     } 
    } 
} 
+1

fyi se si desidera la cartella corrente è possibile utilizzare 'new File (". "); ' – Csanesz

+5

Forse public v listf (String directoryName, Lista file) {è meglio –

21

Utilizzare FileUtils dai comuni di Apache.

listFiles 

public static Collection<File> listFiles(File directory, 
             String[] extensions, 
             boolean recursive) 
Finds files within a given directory (and optionally its subdirectories) which match an array of extensions. 
Parameters: 
directory - the directory to search in 
extensions - an array of extensions, ex. {"java","xml"}. If this parameter is null, all files are returned. 
recursive - if true all subdirectories are searched as well 
Returns: 
an collection of java.io.File with the matching files 
15

è possibile restituire un List invece di un array e le cose diventa molto più semplice.

public static List<File> listf(String directoryName) { 
     File directory = new File(directoryName); 

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

     // get all the files from a directory 
     File[] fList = directory.listFiles(); 
     resultList.addAll(Arrays.asList(fList)); 
     for (File file : fList) { 
      if (file.isFile()) { 
       System.out.println(file.getAbsolutePath()); 
      } else if (file.isDirectory()) { 
       resultList.addAll(listf(file.getAbsolutePath())); 
      } 
     } 
     //System.out.println(fList); 
     return resultList; 
    } 
+0

ma voglio unire l'array –

+0

Perché? Voglio dire: qual è il tuo problema e perché vorresti evitare di usare le liste che fanno tutto per te? –

+0

sì mi scusi ho sonno (insonnia) al momento –

Problemi correlati