[英]Java - Recursion just stops and i don't understand why
因此,正如标题中所述,我遇到了程序无法遍历计算机所有可能目录的问题。
使用此代码,我试图找到没有父级的根文件夹,然后从那里遍历所有文件夹及其子文件夹,等等。
运行后,它将通过第一个目录(对我来说是C :),并找到所有可见的子文件夹。 之后,由于它不包含任何其他目录,因此它将进入第一个文件夹并再次退出。 它所接近的第二个目录仅存在于编译器中,即使不应该隐藏也不会显示在我的资源管理器中。
我的编译器到此为止,并且不会引发错误消息。
码:
public class Main {
public static File getRootFile(File file){
boolean hasParent = true;
while (hasParent){
File parentFile = file.getParentFile();
file = parentFile;
hasParent = file.getParentFile() != null;
}
return file;
}
//Recursion with starting file parameter
public static void rekursion(File pathFile) {
String path = pathFile.toString();
File[] directories_with_hiddenFiles = new File(path).listFiles(File::isDirectory);
int notNull = 0;
for (int i = 0;i< directories_with_hiddenFiles.length;i++){
if (!directories_with_hiddenFiles[i].isHidden()){
notNull++;
}
}
File[] directories = new File[notNull];
for (int i=0, j=0;i<directories_with_hiddenFiles.length;i++){
if(!directories_with_hiddenFiles[i].isHidden()){
directories[j]=directories_with_hiddenFiles[i];
j++;
}
}
//Calls up recursion for each file
try {
for (File a : directories) {
rekursion(a);
}
} catch (NullPointerException e) {
}
}
public static void main(String[] args) {
//Starting Point (Root)
File pathOfThisFile = new File(Main.class.getProtectionDomain().getCodeSource().getLocation().getPath());
File rootFile = getRootFile(pathOfThisFile);
rekursion(rootFile);
}
}
通过将要检查的两个条件都传递到初始查询中,可以避免复杂的代码:
File[] directories = new File(path).listFiles(f -> f.isDirectory() && !f.isHidden()); // loads all not hidden subdirectories, which is what you are trying to do
if (directories != null) { // listFiles can return null, so check it before iterating
for (File a : directories) {
rekursion(a);
}
}
当您的递归函数获得一个目录,您正在运行的用户不具有读取权限,并且
File[] directories_with_hiddenFiles = new File(path).listFiles(File::isDirectory);
将返回null。
您可以使用File.canRead()进行检查,说实话,您的代码有多个问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.