这应该很容易。这个问题(Java - Search for files in a directory)似乎占据了我需要的99%,但缺少1%是真正的SOB。
我需要在目录中找到特定文件,并将完整路径和文件名作为字符串返回。如果有多个匹配文件,那很好,我只需要第一个匹配。
下面的代码工作,因为它将递归遍历目录结构并返回所有匹配 - 当我将sysout放入方法的各个部分时,我可以看到它发生 - 但我不能为我的生活当它找到匹配时让它停止并返回匹配的值。
我尝试用一个WHILE语句替换FOR语句,该语句由foundfile变量的值以及其他六种方法控制,但它们都归结为同一个结尾;当我找到匹配的文件并将其设置为“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);
}
}
答案 0 :(得分:4)
您可以在找到文件路径时返回该文件路径。如果您只对第一场比赛感兴趣,则无需检查其他文件:
这是一个例子(未经测试):
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
}