gpt4 book ai didi

Java - 递归停止了,我不明白为什么

转载 作者:行者123 更新时间:2023-12-02 10:28:48 25 4
gpt4 key购买 nike

因此,正如标题中所述,我面临的问题是我的程序不会迭代计算机的所有可能的目录。

使用此代码,我尝试找到没有父文件夹的根文件夹,然后从那里遍历所有文件夹及其子文件夹等。

运行后,它会遍历第一个目录(对我来说是 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);
}
}

关于Java - 递归停止了,我不明白为什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53724669/

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