【问题标题】:Finding a file in a directory and returning its full path and filename在目录中查找文件并返回其完整路径和文件名
【发布时间】:2014-09-26 05:14:43
【问题描述】:

这应该很容易。这个问题 (Java - Search for files in a directory) 似乎把我 99% 的路带到了我需要去的地方,但那 1% 的缺失是一个真正的 SOB。

我需要在目录中找到一个特定的文件,并将完整的路径和文件名作为字符串返回。如果有多个匹配的文件,那很好,我只需要第一个匹配。

下面的代码之所以有效,是因为它将递归遍历目录结构并返回所有匹配项——当我将 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);

    }
}

【问题讨论】:

标签: java loops recursion


【解决方案1】:

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

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

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
}

【讨论】:

  • 您在 for 循环中初始化了返回的字符串。 (头反复敲桌子的声音。)
猜你喜欢
  • 1970-01-01
  • 2011-02-02
  • 2020-04-27
  • 1970-01-01
  • 2010-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多