我看过Recursively list files in Java,但这似乎并没有解决我的问题。 我已经尝试按照这个问题中的答案显示的方式实现它,但我的程序似乎仍然没有按照我想要的方式工作。如果它找到一个目录并将该新目录路径作为参数发送以检查该文件是否存在,它仍然不会“降低”该级别。
我正在努力让我的类FileFinder工作。 给定一个文件名和一个开始搜索的目录,我想搜索并找到带有文件名的文件。
我在/Users/Name/Documents/testing/
中创建了一种测试目录。
在/Documents/testing/
下的3个目录之一中有一个名为“test.py”的文件。但是我的程序找不到该文件。但是,如果我给方法提供正确的目录,如/Documents/testing/correctDir/
,它确实找到并打印文件及其路径。
所以我认为我的问题是当我找到一个目录时,fileFinder
的调用不能正常工作。我在那条线上处理“AbsolutePath”错了吗?
以下是代码:
import java.io.*;
public class FileFinder {
String fileFinder(String fileName, String root){
String pathToFile = "";
File rootDir = new File(root);
File[] files = rootDir.listFiles();
for(File f:files){
if(f.isDirectory()){
//System.out.println(f.getAbsolutePath());
fileFinder(fileName,f.getAbsolutePath());
}
else if(f.getName().equals(fileName)){
pathToFile = f.getAbsolutePath();
}
}
return pathToFile;
}
}
答案 0 :(得分:1)
您犯了两个错误:首先,在递归调用pathToFile
的情况下,您没有设置fileFinder
。其次,当您在当前查找的目录中找到该文件时,不会中断for
循环。这是您的代码,其中包含更正,我已对其进行了测试并且工作正常:
String fileFinder(String fileName, String root){
String pathToFile = "";
File rootDir = new File(root);
File[] files = rootDir.listFiles();
for(File f:files){
if(f.isDirectory()){
//System.out.println(f.getAbsolutePath());
pathToFile = fileFinder(fileName,f.getAbsolutePath());
}
else if(f.getName().equals(fileName)){
pathToFile = f.getAbsolutePath();
}
if (!pathToFile.isEmpty())
break;
}
return pathToFile;
}