Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java:根据目录和子目录中的文件名搜索文件_Java_Search_Subdirectory - Fatal编程技术网

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;
}