2016-07-08 170 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); 
    } 
} 
相关问题