簡體   English   中英

如何在Java目錄及其子目錄中查找/列出具有特定名稱的文件或目錄?

[英]How do I find/list a file or directory with specific name inside a directory and its subdirectories in Java?

我在Linux(Redhat)上的文件/目錄樹是什么樣的。

/search
├───sub1
│   └───data (directory)
└───sub2
    └───data (file)

下面列出了我已經嘗試過的內容。

示例I(我假設目錄是Linux中的文件,而Java知道這一點)

FileUtils.listFiles(new File("/search"),
                        new NameFileFilter("data"), TrueFileFilter.INSTANCE)
                        .forEach(System.out::println);

實例二

FileUtils.listFilesAndDirectories(new File("/search"),
                        new NameFileFilter("data"), TrueFileFilter.INSTANCE)
                        .forEach(System.out::println);

上面的代碼示例不像我希望的那樣打印“ / search / sub1 / data”和“ / search / sub2 / data” FileUtils來自http://commons.apache.org/proper/commons-io/javadocs/ api-release / org / apache / commons / io / FileUtils.html

有沒有人有辦法解決嗎?

您可以使用Java 7 Files.walkFileTreePathMatcherFileVisitor來實現相同的目的

import java.io.IOException;
import java.nio.file.FileSystems;
import java.nio.file.FileVisitResult;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.PathMatcher;
import java.nio.file.Paths;
import java.nio.file.SimpleFileVisitor;
import java.nio.file.attribute.BasicFileAttributes;

public class MyVisitor extends SimpleFileVisitor<Path> {

    PathMatcher matcher = FileSystems.getDefault().getPathMatcher("glob:data");

    @Override
    public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {
        if (matcher.matches(dir.getFileName())) {
            System.out.println("dir found " + dir);
        }
        return FileVisitResult.CONTINUE;
    }

    @Override
    public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
        if (matcher.matches(file.getFileName())) {
            System.out.println("file found " + file);
        }

        return FileVisitResult.CONTINUE;
    }

    public static void main(String[] args) throws IOException {
        Files.walkFileTree(Paths.get("full/path/to/your/search"), new MyVisitor());
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM