返回值后递归方法会继续吗?

时间:2017-05-01 00:13:48

标签: java recursion

我正在编写一个快速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总是退出方法,那么为什么递归甚至在它返回一个值之后仍然继续?我没有发现任何类似的问题,所以任何帮助将不胜感激!

(另外,我如何编辑方法,以便在找不到请求的文件时返回空白""字符串?)

1 个答案:

答案 0 :(得分:2)

当您找到该文件时,您将从最里面的电话回来。但是当您扫描目录时,您没有使用返回值。

改变这个:

searchForFile(path[i], filename);

为:

String result = searchForFile(path[i], filename);
if (result != null) {
    return result;
}

方法底部的return null;就在那里,因为所有方法都需要返回一个值。无论是否找到该文件。如果在当前目录(或其子目录)中找不到该文件,则可以return null;表示找不到该文件。

附带建议:在Java 8中使用Optional而不是null

相关问题