gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 12:31:26 25 4
gpt4 key购买 nike

我在 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());
}
}

关于java - 如何在 Java 中查找/列出目录及其子目录中具有特定名称的文件或目录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25898669/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com