因此,正如 Headers 中所述,我面临的问题是我的程序不会遍历我计算机的所有可能目录 .
使用此代码,我试图找到没有父项的根文件夹,然后从那里查看所有文件夹及其子文件夹等等 .
运行后,它通过第一个目录(对我来说是C :)并找到所有可见的子文件夹 . 然后它进入第一个文件夹并再次退出,因为它不包含任何其他目录 . 它接近编辑器的第二个目录,并且不会出现在我的资源管理器中,即使它不应该被隐藏 .
我的编译器在此停止,不会抛出错误消息 .
Code:
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);
}
}
2 回答
您可以通过将要检查的条件传递到初始查询来避免复杂的代码:
当你的递归函数获得一个你正在运行的用户没有读取权限的目录时,你会得到一个空指针异常,
将返回null .
您可以使用File.canRead()来检查,老实说,您的代码有多个问题 .