2015-10-04 36 views
3

我想從當前的子目錄中獲得所有目錄&。如何用Java 8探索所有子目錄?

我找到了一種方法來實現這個flatMap()。但它有一個深層次:

List<File> files = 
      Stream.of(new File(".").listFiles()) 
        .flatMap(file -> file.listFiles() == null ? 
          Stream.of(file) : Stream.of(file.listFiles())) 
        .collect(toList()); 
    System.out.println("Count: " + files.size()); 
    files.forEach(path -> System.out.println("Path: " + path)); 

如果我有下一個項目struckture:

enter image description here

將只顯示:

路徑:./test/next1

如何與Java 1.8全面深入實現這一目標如下

路徑:./test/next1/next2/next3

回答

3

使用Files.walk

List<Path> files = Files.walk(Paths.get(".")).collect(Collectors.toList()); 
System.out.println("Count: " + files.size()); 
files.forEach(System.out::println); 

注意這個解決方案有一個問題:如果在遍歷過程中遇到任何異常(例如,拒絕某個嵌套文件夾的訪問),它將立即失敗並出現異常,並且沒有簡單的方法可以恢復漫遊G。檢查,例如,this question。如果在您的情況下不需要恢復異常,那麼此解決方案將正常工作。