7

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

4

7 回答 7

8

在 Java 8 中通过流 API

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

#walk 是惰性的,因此任何短路终端操作都会优化所需的 IO。

于 2014-06-11T03:15:52.587 回答
4

要遍历文件树,可以使用FileVisitor接口。请看教程。另请参阅查找示例代码

于 2012-05-28T07:25:01.000 回答
3

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

java.io.FileAPI 参考

于 2012-05-28T07:19:20.427 回答
3

正如你提到的递归应该满足这个要求

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

}
于 2012-05-28T07:28:14.150 回答
0

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

  1. 列出每个目录
  2. 如果列表包含匹配的目录,则打印并退出应用程序
  3. 为每个目录启动一个任务。
于 2012-05-28T07:23:43.857 回答
0

就像是:

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;
}
于 2012-05-28T07:25:21.940 回答
0

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

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;
    }
}
于 2017-08-08T12:04:37.287 回答