退货声明不起作用

时间:2013-02-19 08:32:21

标签: java

有人可以帮我解决问题。我有一个函数,它检查特定路径中是​​否存在文件。该函数检查文件名是否匹配,路径是否也匹配。(具有特定名称的文件可能存在于多个位置)。请在下面找到我的代码。

memberPath是一个包含相对路径的静态变量。 file_Path是一个静态变量,在找到匹配项后会更新。

我的问题是函数找到了匹配但是它突然出现了for-loop来返回语句但是又回到了for循环。有人可以帮我修改我的代码,这样一旦找到匹配,就会将bac返回到主叫位置。

public static String traverse(String path, String filename) {
        String filePath = null;
        File root = new File(path);
        File[] list = root.listFiles();

        for (File f : list) {
            if (f.isDirectory()) {
                traverse(f.getAbsolutePath(), filename);
            } else if (f.getName().equalsIgnoreCase(filename) && f.getAbsolutePath().endsWith(memberPath)) {
                filePath = f.getAbsolutePath();
                file_Path = filePath;
                break ;
                }
        }
        return filePath;
}

3 个答案:

答案 0 :(得分:6)

添加:

return traverse(f.getAbsolutePath(), filename);

返回此次调用所获得的值。

正如所指出的那样 - 你可以返回值而不是break。

答案 1 :(得分:3)

递归的工作方式是函数调用自身。所以当你的函数return时,它会回到for循环中,因为很可能外部函数(调用它的函数)从下面的行调用它

if (f.isDirectory()) {
            traverse(f.getAbsolutePath(), filename);

由于是这种情况,你需要在这里添加返回,如baraky所解释的那样,否则你将失去内部函数派生的答案。

答案 2 :(得分:1)

正如baraky,Karthik和JanDvorak所指出的,更新的代码是:

public String traverse(String path, String filename) {
        String filePath = null;
        File root = new File(path);
        File[] list = root.listFiles();

        for (File f : list) {
            if (f.isDirectory()) {
                return traverse(f.getAbsolutePath(), filename);
            } else if (f.getName().equalsIgnoreCase(filename)
                    && f.getAbsolutePath().endsWith(memberPath)) {
                filePath = f.getAbsolutePath();
                file_Path = filePath;
                return filePath;

                }
        }       
        return filePath;
    }

谢谢你们!