2013-02-03 18 views
41

Powiel możliwe:
List all files from a directory recursively with Javalista wszystkich plików w folderze, a także podfoldery

Jak mogę zwrócić tablicę plików, które zawierają wszystkie pliki z folderu, a także podfoldery mój Metoda właśnie działa dla folderu i nie zawiera podfolderów.

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

Możesz użyć 'FileUtils' – Maroun

+0

Usunąć blok, który sprawdza, czy jest to podkatalog? –

+2

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

Odpowiedz

61

Korzystanie Ci aktualny kod, aby ten uszczypnąć:

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 jeśli chcesz mieć bieżący folder możesz użyć 'new File (". "); ' – Csanesz

+5

Może publiczne void listf (String directoryName, Lista plików) {jest lepsze –

21

Użyj FileUtils ze wspólnoty 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

Można powrócić do List zamiast tablicy i rzeczy robi się o wiele prostsze.

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

, ale chcę scalić tablicę –

+0

Dlaczego? Mam na myśli: jaki jest twój problem i dlaczego chcesz uniknąć używania list, które wykonują dla Ciebie scalanie? –

+0

tak, przepraszam, że jestem śpiący (bezsenność) w tej chwili –

Powiązane problemy