繁体   English   中英

递归搜索Java目录

[英]Recursively search for a directory in Java

用Java查找具有特定名称的目录的最佳方法是什么? 我要查找的目录可以位于当前目录或其子目录之一中。

在Java 8中,通过streams API

Optional<Path> hit = Files.walk(myPath)
   .filter(file -> file.getFileName().equals(myName))
   .findAny();

#walk很懒,因此任何短路端子操作都会优化所需的IO。

要遍历文件树,可以使用FileVisitor界面。 请参阅教程 也请参阅查找示例代码

您的解决方案将包括File.listFiles(String)

java.io.File API参考

正如您提到的,递归应满足此要求

import java.io.File;

public class CheckFile {

    private static boolean foundFolder = false;

    public static void main(String[] args) {
        File dir = new File("currentdirectory");
        findDirectory(dir);
    }

    private static void findDirectory(File parentDirectory) {
        if(foundFolder) {
            return;
        }
        File[] files = parentDirectory.listFiles();
        for (File file : files) {
            if (file.isFile()) {
                continue;
            }
            if (file.getName().equals("folderNameToFind")) {
                foundFolder = true;
                break;
            }
            if(file.isDirectory()) {
               findDirectory(file);
            }
        }
    }

}

分而治之? 天真的方法:对于每个目录,您都可以启动任务,它会执行以下操作:

  1. 列出每个目录
  2. 如果列表包含匹配的目录,则打印并退出应用程序
  3. 为每个目录启动一个任务。

就像是:

public static final File findIt(File rootDir, String fileName) {
    File[] files = rootDir.listFiles();
    List<File> directories = new ArrayList<File>(files.length);
    for (File file : files) {
        if (file.getName().equals(fileName)) {
            return file;
        } else if (file.isDirectory()) {
            directories.add(file);
        }
    }

    for (File directory : directories) {
        File file = findIt(directory);
        if (file != null) {
            return file;
        }
    }

    return null;
}

或者,您应该使用递归搜索文件的概念直到找到为止:这是代码:

String name; //to hold the search file name

public String listFolder(File dir) {
    int flag;
    File[] subDirs = dir.listFiles(new FileFilter() {
        @Override
        public boolean accept(File pathname) {
            return pathname.isDirectory();
        }
    });
    System.out.println("File of Directory: " + dir.getAbsolutePath());
    flag = Listfile(dir);
    if (flag == 0) {
        System.out.println("File Found in THe Directory: " + dir.getAbsolutePath());
        Speak("File Found in THe Directory: !!" + dir.getAbsolutePath());
        return dir.getAbsolutePath();
    }
    for (File folder : subDirs) {
        listFolder(folder);
    }
    return null;
}

private int Listfile(File dir) {
    boolean ch = false;
    File[] files = dir.listFiles();
    for (File file : files) {
        Listfile(file);
        if (file.getName().indexOf(name.toLowerCase()) != -1) {//check all in lower case
            System.out.println(name + "Found Sucessfully!!");
            ch = true;

        }
    }
    if (ch) {
        return 1;
    } else {
        return 0;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM