gpt4 book ai didi

Java:如何递归获取所有子目录?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:39:18 26 4
gpt4 key购买 nike

在调试越界递归函数之前:是否有获取子目录的命令? giveMeSubDirs(downToPath)?

// WARNING: RECURSION out of bound or too much data
public HashSet<FileObject> getAllDirs(String path) {
HashSet<FileObject> checkedDirs = new HashSet<FileObject>();
HashSet<FileObject> allDirs = new HashSet<FileObject>();

String startingPath = path;

File fileThing = new File(path);
FileObject fileObject = new FileObject(fileThing);

for (FileObject dir : getDirsInDir(path)) {

// SUBDIR

while ( !checkedDirs.contains(dir)
&& !(getDirsInDir(dir.getFile().getParent()).size() == 0)) {

// DO NOT CHECK TOP DIRS if any bottom dir UNCHECKED!

while ( uncheckedDirsOnLevel(path, checkedDirs).size() > 0) {

while (getDirsInDir(path).size() == 0
|| (numberOfCheckedDirsOnLevel(path, checkedDirs)==getDirsInDir(path).size())) {
allDirs.add(new FileObject(new File(path)));
checkedDirs.add(new FileObject(new File(path)));

if(traverseDownOneLevel(path) == startingPath )
return allDirs;

//get nearer to the root
path = traverseDownOneLevel(path);
}
path = giveAnUncheckedDir(path, checkedDirs);

if ( path == "NoUnchecked.") {
checkedDirs.add(new FileObject( (new File(path)).getParentFile() ));
break;
}
}
}
}
return allDirs;
}

代码总结:

  1. 尽可能深入目录树。当一个dir中没有dir时,停止,将dir放到set中,向上遍历。不要检查集合中的目录。
  2. 如果到达起始路径,请停止并返回集合。
  3. 重复步骤 1 和 2。

前提:目录结构有限,数据量小。

最佳答案

您可以使用以下代码片段获取所有子目录:

File file = new File("path");
File[] subdirs = file.listFiles(new FileFilter() {
public boolean accept(File f) {
return f.isDirectory();
}
});

这只会获取直接的子目录,要递归地检索所有子目录,您可以这样写:

List<File> getSubdirs(File file) {
List<File> subdirs = Arrays.asList(file.listFiles(new FileFilter() {
public boolean accept(File f) {
return f.isDirectory();
}
}));
subdirs = new ArrayList<File>(subdirs);

List<File> deepSubdirs = new ArrayList<File>();
for(File subdir : subdirs) {
deepSubdirs.addAll(getSubdirs(subdir));
}
subdirs.addAll(deepSubdirs);
return subdirs;
}

关于Java:如何递归获取所有子目录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2581158/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com