java - 在目录中查找文件并返回其完整路径和文件名

标签 java loops recursion

这应该很容易。这个问题 ( Java - Search for files in a directory ) 似乎让我完成了 99% 的任务,但那 1% 的问题真是令人哭笑不得。

我需要在目录中查找特定文件并以字符串形式返回完整路径和文件名。如果有多个匹配文件,没关系,我只需要第一个匹配项。

下面的代码之所以有效,是因为它会递归地遍历目录结构并返回所有匹配项——当我将 sysouts 放入方法的各个部分时,我可以看到它发生了——但我一辈子都做不到当它找到匹配项时让它停止并返回匹配项的值。

我试过用由 foundfile 变量的值控制的 WHILE 语句替换 FOR 语句以及其他六种方法,但它们都归结为同一个结果;当我找到匹配的文件并将其设置为“else if”子句中的 foundfile 变量时,for 循环会继续迭代并在下一个循环中用“”值覆盖 foundfile 变量的值。我原以为从“if else”子句中调用 setOutput 方法会成功设置值,直到列表数组为空,但显然不是。

很明显,关于递归和参数的持久性,我从根本上误解了一些东西。任何人都可以照亮吗?

package app;

import java.io.*;
import java.util.*;

class FindFile {

    public String setOutput(String name, File file, String fileloc) {
        String foundfile = fileloc;
        File[] list = file.listFiles();
        if (list != null)
            for (File fil : list) {
                if (fil.isDirectory()) {
                    setOutput(name, fil, foundfile);

                } else if (fil.getName().contains(name)) {
                    foundfile = (fil.getParentFile() + "\\" + fil.getName());
                    setOutput(name, fil, foundfile);
                }
            }

        return foundfile;

    }

    public static void main(String[] args) {
        FindFile ff = new FindFile();
        String thisstring = ff.setOutput(".jar", new File("/Temp/df384b41-198d-4fee-8704-70952d28cbde"), "");

        System.out.println("output: " + thisstring);

    }
}

最佳答案

找到后可以返回文件路径。如果您只对第一个匹配感兴趣,则无需检查其他文件:

这是一个示例(未测试):

public String setOutput(String name, File file) {
    File[] list = file.listFiles();
    if (list != null) {
        for (File fil : list) {
            String path = null;
            if (fil.isDirectory()) {
                path = setOutput(name, fil);
                if (path != null) {
                    return path;
                }
            } else if (fil.getName().contains(name)) {
                path =fil.getAbsolutePath();
                if (path != null) {
                    return path;
                }
            }
        }
    }
    return null; // nothing found
}

关于java - 在目录中查找文件并返回其完整路径和文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26052502/

相关文章:

razor - Umbraco Razor - 遍历多节点选择器

python - python函数中的形参和实参

php - 优化 PHP 中的递归方法

java - 在 RxJava 的 .flatMap() 运算符中处理两种不同类型

java - 我应该在 apache fop 的类路径中包含哪些 jar

java - Hibernate一对多关系: can't remove children once parent is removed

c - 为什么这个函数在完成递归运行后返回整数 17?

java - 打印百分比的程序中的 UnknownFormatConversionException

java - JAVA数组只打印最后一个元素?

python - 如何打印密码组合(但每个索引都有自定义约束)