在具有多个目录的目录中搜索文件

Lar*_*ark 7 java

这是我的目标.我希望能够将父目录和文件名传递给在目录和任何子目录中搜索该特定文件的方法.下面是我一直在使用的代码,但无法让它完全按照我的意愿去做.它会找到我指定的文件,但不会返回任何内容.

private static File findFile(File dir, String name) {
    String file     = "";
    File[] dirlist  = dir.listFiles();

    search:
        for(int i = 0; i < dirlist.length; i++) {
            if(dirlist[i].isDirectory()) {
                findFile(dirlist[i], name);
            } else if(dirlist[i].getName().matches(name)) {
                file = dirlist[i].toString();
                break search;
            }
        }

    return new File(file);
}
Run Code Online (Sandbox Code Playgroud)

我知道当方法找到一个目录并调用自身时,它会重置文件变量,这是我存储找到的文件的位置.所以这就是为什么我得到一个空白的回报.我不确定如何实现这一目标,或者甚至可能.

Chs*_*y76 5

问题是你没有从递归调用返回任何东西:

if(dirlist[i].isDirectory()) {
    findFile(dirlist[i], name); // <-- here
} else if(dirlist[i].getName().matches(name)) {
Run Code Online (Sandbox Code Playgroud)

我会做以下事情:

private static File findFile(File dir, String name) {
  File result = null; // no need to store result as String, you're returning File anyway
  File[] dirlist  = dir.listFiles();

  for(int i = 0; i < dirlist.length; i++) { 
    if(dirlist[i].isDirectory()) {
      result = findFile(dirlist[i], name);
      if (result!=null) break; // recursive call found the file; terminate the loop
    } else if(dirlist[i].getName().matches(name)) {
      return dirlist[i]; // found the file; return it
    }
  }
  return result; // will return null if we didn't find anything
}
Run Code Online (Sandbox Code Playgroud)