3
我正在写一个快速的Java递归方法,给定一个根文件夹和文件名,搜索文件的文件名称。递归方法在返回值后继续吗?
import Java.io.File;
public static String searchForFile(File currentFolder, String filename)
{
try
{
File[] path = currentFolder.listFiles();
for (int i = 0; i < path.length; i++)
{
if (path[i].isDirectory())
{
System.out.println("Directory: " + path[i].toString());
searchForFile(path[i], filename);
}
else
{
System.out.println("File: " + path[i].toString());
if(path[i].getName().equals(filename))
{
System.out.println("Your file has been found!";
return path[i].toString();
}
}
}
}
catch (Exception e)
{
e.printStackTrace();
}
return null; // Omitting this line yields compiling errors, not sure why?
}
public static void main(String[] args)
{
System.out.println("Hello, enter the root folder and file name.");
String rootFolder = "Desktop";
String fileName = "Hello.txt";
File f = new File("C:\\Users\\Me\\" + rootFolder);
searchForFile(f, fileName);
}
程序本身技术上的工作,但searchForFile()
不断迭代请求的文件被发现后还是一样。例如,我会得到一个输出,如:
File: C:\Users\Me\Desktop\My Stuff\NotHello.txt
**File: C:\Users\Me\Desktop\My Stuff\Hello.txt**
Your file has been found!
File: C:\Users\Me\Desktop\My Stuff\AlsoNotHello.txt
File: C:\Users\Me\Desktop\My Stuff\StillNotHello.txt
File: C:\Users\Me\Desktop\My Stuff\WhyIsThisMethodStillRunning.txt
我一直在这里挠我的头一阵子。我认为return
总是退出该方法,那么即使它返回一个值,为什么递归仍然继续?我还没有找到任何类似的问题,所以任何帮助将不胜感激!
(另外,我怎么能编辑方法,这样,如果没有找到该请求的文件,它返回一个空字符串""
?)
嗨西蒙,你的建议工作,谢谢你!如果你不介意,你能帮助解释为什么这有效吗? 为什么使用'return searchForFile(path [i],filename);'不工作? –
@RyanA。因为如果你这样做,无论文件是否被找到,你都会返回一个值。假设你的文件在'dir2'中,但是'dir1'也存在。首先搜索dir1,然后你返回searchForFile(dir1,filename)',但是返回'null',因为那里没有文件。那么你'返回null;'和voilá,你的程序会说它找不到你要找的文件。 –