这是一个简单的函数,搜索给定文件夹中的文件及其子文件夹我能够找到该文件但不知何故返回值为null,并且有人也可以解释当我们使用递归函数时堆栈中发生的事情如果你能把它与我的情景联系起来那就太棒了......
File getFileInFolder(File folder, String fileName) {
//System.out.println(" PathTo : "+folder.getAbsolutePath());
File [] files = folder.listFiles();
if (files != null) {
for (int i = 0; i < files.length; i++) {
if (files[i].isDirectory()) {
return getFileInFolder(files[i],fileName);
} else {
//System.out.println(" file : "+files[i].getName());
if (files[i].getName().equals(fileName)) {
System.out.println(" Found file : "+files[i].getName());
return files[i];
}
}
}
}
return null;
}
答案 0 :(得分:2)
假设你正在寻找以下文件夹中的a.txt:
root
sub1
b.txt
sub2
a.txt
您的算法的作用是
因此,该算法将仅在sub1中搜索,并且将返回null。
如果在第一个目录中找不到该文件,则需要继续在其他目录中搜索:
for (int i = 0; i < files.length; i++) {
if (files[i].isDirectory()) {
File resultForSubDirectory = getFileInFolder(files[i], fileName);
if (resultForSubDirectory != null) {
return resultForSubDirectory;
} // else: continue looping
}
else {
...
}
}
答案 1 :(得分:2)
我使用bool变量filefound解决了它,我打破了堆栈中的所有循环,不知道这是否是最好的方法,但它适用于我
boolean filefound = false;
File getFileInFolder(File folder, String fileName) {
filefound = false;
//System.out.println(" PathTo : "+folder.getAbsolutePath());
File [] files = folder.listFiles();
File file = null;
if (files != null) {
for (int i = 0; i < files.length; i++) {
if (files[i].isDirectory()) {
file = getFileInFolder(files[i],fileName);
if(filefound) {
file= files[i];
break;
}
} else {
//System.out.println(" file : "+files[i].getName());
if (files[i].getName().equals(fileName)) {
System.out.println(" Found file : "+files[i].getName());
file= files[i];
filefound = true;
break;
}
}
}
}
return file;
}