List<Path> subfolder = Files.walk(folderPath, 1)
.filter(Files::isDirectory)
.collect(Collectors.toList());
它将包含文件夹路径及其深度为1的所有子文件夹。如果您只需要子文件夹,请添加:
subfolders.remove(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);
}
}
}
查看 获取文件夹中所有文件的文件名 一个简单的递归函数也可以工作,只要注意无限循环。
然而,我更喜欢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);
}
}