java:根据目录和子目录中的文件名搜索文件
我需要一个查找文件根据其名称在目录树。然后显示此文件的路径。我找到了类似的东西,但它是根据扩展搜索的。有谁能帮我修改代码以满足我的需要…谢谢java:根据目录和子目录中的文件名搜索文件,java,search,subdirectory,Java,Search,Subdirectory,我需要一个查找文件根据其名称在目录树。然后显示此文件的路径。我找到了类似的东西,但它是根据扩展搜索的。有谁能帮我修改代码以满足我的需要…谢谢 public class filesFinder { public static void main(String[] args) { File root = new File("c:\\test"); try { String[] extensions = {"txt"}; boolean recursi
public class filesFinder {
public static void main(String[] args) {
File root = new File("c:\\test");
try {
String[] extensions = {"txt"};
boolean recursive = true;
Collection files = FileUtils.listFiles(root, extensions, recursive);
for (Iterator iterator = files.iterator(); iterator.hasNext();) {
File file = (File) iterator.next();
System.out.println(file.getAbsolutePath());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
Java中的递归目录搜索非常简单。
java.io.File
类有一个listFiles()
方法,该方法提供目录的所有File
子目录;还有一个isDirectory()
方法,您可以调用文件来确定是否应该递归搜索特定的子项。我真的不知道FileUtils是做什么的,但是将扩展名中的“txt”改为“yourfile.whatever”怎么样?您可以像这样使用FileFilter
public class MyFileNameFilter implements FilenameFilter {
@Override
public boolean accept(File arg0, String arg1) {
// TODO Auto-generated method stub
boolean result =false;
if(arg1.startsWith("KB24"))
result = true;
return result;
}
}
这样称呼它
File f = new File("C:\\WINDOWS");
String [] files = null;
if(f.isDirectory()) {
files = f.list(new MyFileNameFilter());
}
for(String s: files) {
System.out.print(s);
System.out.print("\t");
}
Java8LAMDA使这更容易,而不是使用FileNameFilter,而是传递lambda表达式
File[] filteredFiles = f.listFiles((file, name) ->name.endsWith(extn));
你能提供一个你从哪里找到这个代码的链接吗?我不确定FileUtils是否是Java库的一部分,它可能是其他人的自定义类…没关系,找到它了,FileUtils来自apache Java库,显然,可以找到Java.io.file的文档,但有一个问题:files=f.list(new MyFileNameFilter());不可访问递归搜索类型的封闭实例。必须使用可在其顶部实现的RecursiveSearch类型的封闭实例来限定分配。是的…但我不知道这意味着什么…我使用java大约10天:)@skaryu-适合我。。。您添加了包括条件的整个块了吗?但是有一个问题…我需要找到没有扩展名的文件OK…现在它是这样工作的:Collection files=FileUtils.listFiles(root,null,recursive);再次感谢如果我只想找到一个文件…如果没有cyclus,它应该是什么样子?
File[] filteredFiles = f.listFiles((file, name) ->name.endsWith(extn));
public static File find(String path, String fName) {
File f = new File(path);
if (fName.equalsIgnoreCase(f.getName())) return f;
if (f.isDirectory()) {
for (String aChild : f.list()) {
File ff = find(path + File.separator + aChild, fName);
if (ff != null) return ff;
}
}
return null;
}