Java NIO,获取某个文件夹下的所有子文件夹

6

我该如何获取某个文件夹的所有子文件夹?我会使用JDK 8和nio。

图片

例如,对于文件夹“Designs.ipj”,该方法应返回{"Workspace","Library1"}。

提前感谢您!


2
你应该编辑你的帖子并在问题中包含图片。最终,外部链接在某些时候会变得不可用,从而防止未来的用户受益于你的问题。 - Andrej
https://docs.oracle.com/javase/tutorial/essential/io/dirs.html#listdir - Fildor
这个需要非阻塞IO吗? - niceman
我无法添加图片,因为我的评分太低了。 - M. Black
2个回答

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

它将包含文件夹路径及其深度为1的所有子文件夹。如果您只需要子文件夹,请添加:

subfolders.remove(0);

1
DirectoryStream<Path> paths = Files.newDirectoryStream(folder, entry -> Files.isDirectory(entry)); 这行代码很短。 - lisyara

-2

你需要读取文件夹中的所有项目,并过滤出目录,如有需要可以重复此过程。

为了实现这个目标,你可以使用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);
            }
        }            
    }

查看 获取文件夹中所有文件的文件名 一个简单的递归函数也可以工作,只要注意无限循环。

然而,我更喜欢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);
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接