2016-07-08 211 views
1

如何獲取某個文件夾的所有子文件夾?我會使用JDK 8和nio。Java nio,獲取某個文件夾的所有子文件夾

picture

例如,文件夾 「Designs.ipj」 方法應該返回{ 「工作區」, 「分享幫助」}

預先感謝您!

+2

你應該編輯你的文章並在你的問題中包含圖像。最終,外部鏈接在某些時候無法使用,從而阻止未來的用戶從您的問題中受益。 – Andrej

+0

https://docs.oracle.com/javase/tutorial/essential/io/dirs.html#listdir – Fildor

+0

嗯,你需要這個非阻塞IO嗎? – niceman

回答

1
List<Path> subfolder = Files.walk(folderPath, 1) 
      .filter(Files::isDirectory) 
      .collect(Collectors.toList()); 

它將包含FOLDERPATH和深度1.所有子文件夾如果您只需要子文件夾,只需添加:

subfolders.remove(0); 
+0

非常感謝! –

0

你要讀一個文件夾中的所有項目,並篩選出目錄,根據需要多次重複此過程。

要做到這一點,你可以使用listFiles()

File folder = new File("your/path"); 
Stack<File> stack = new Stack<File>(); 
Stack<File> folders = new Stack<File>(); 

stack.push(folder); 
while(!stack.isEmpty()) 
    { 
     File child = stack.pop(); 
     File[] listFiles = child.listFiles(); 
     folders.push(child); 

     for(File file : listFiles) 
     { 
      if(file.isDirectory()) 
      { 
       stack.push(file); 
      } 
     }    
    } 

看到 Getting the filenames of all files in a folder 一個簡單的遞歸函數會也行,只要確保警惕無限循環的。

但是我更偏向於DirectoryStream。它允許您創建一個過濾器,以便您只添加符合您的規格的項目。

DirectoryStream.Filter<Path> visibleFilter = new DirectoryStream.Filter<Path>() 
{ 
    @Override 
    public boolean accept(Path file) 
    { 
     try 
     { 
      return Files.isDirectory(file)); 
     } 
     catch(IOException e) 
     { 
      e.printStackTrace(); 
     } 

     return false; 
} 

try(DirectoryStream<Path> stream = Files.newDirectoryStream(directory.toPath(), visibleFilter)) 
{ 
    for(Path file : stream) 
    { 
     folders.push(child); 
    } 
} 
相關問題