繁体   English   中英

在目录中搜索文件及其在Java中的子目录

[英]Search files in directory and its sub directory in java

我想知道在目录中搜索文件及其子目录中更快的方法。 但是,我知道父目录,但不知道祖父母目录。 例如c:/ temp / test / * / 111 / abx.txt

我尝试了File.walkFileTree,但不确定如何使用它,因为它对我不起作用。

请帮忙。 谢谢

您可以将Files类与Stream API一起使用,以完成此任务,如下所示:

Files.walk(Paths.get(path))
    .filter(Files::isRegularFile)
    .forEach(System.out::println);

这是一个示例,向您展示如何从目录“ / Users / mkyong / websites”及其所有子目录中递归搜索名为“ post.php”的文件。

import java.io.File;
import java.util.ArrayList;
import java.util.List;
public class FileSearch {
private String fileNameToSearch;
private List<String> result = new ArrayList<String>();

public String getFileNameToSearch() {
    return fileNameToSearch;
}

public void setFileNameToSearch(String fileNameToSearch) {
    this.fileNameToSearch = fileNameToSearch;
}

public List<String> getResult() {
    return result;
}

public static void main(String[] args) {

    FileSearch fileSearch = new FileSearch();

    // try different directory and filename :)
    fileSearch.searchDirectory(new File("/Users/mkyong/websites"), "post.php");

    int count = fileSearch.getResult().size();
    if (count == 0) {
        System.out.println("\nNo result found!");
    } else {
        System.out.println("\nFound " + count + " result!\n");
        for (String matched : fileSearch.getResult()) {
            System.out.println("Found : " + matched);
        }
    }
}

public void searchDirectory(File directory, String fileNameToSearch) {
    setFileNameToSearch(fileNameToSearch);

    if (directory.isDirectory()) {
        search(directory);
    } else {
        System.out.println(directory.getAbsoluteFile() + " is not a directory!");
    }

}

private void search(File file) {
    if (file.isDirectory()) {
        System.out.println("Searching directory ... " + file.getAbsoluteFile());

        // do you have permission to read this directory?
        if (file.canRead()) {
            for (File temp : file.listFiles()) {
                if (temp.isDirectory()) {
                    search(temp);
                } else {
                    if (getFileNameToSearch().equals(temp.getName().toLowerCase())) {
                        result.add(temp.getAbsoluteFile().toString());
                    }

                }
            }

        } else {
            System.out.println(file.getAbsoluteFile() + "Permission Denied");
        }
    }

}

}

暂无
暂无

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

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