【发布时间】: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);
}
}
【问题讨论】: