[英]How do I find/list a file or directory with specific name inside a directory and its subdirectories in Java?
What my file/directory tree on Linux (Redhat) looks like. 我在Linux(Redhat)上的文件/目录树是什么样的。
/search
├───sub1
│ └───data (directory)
└───sub2
└───data (file)
What I already tried is listed below. 下面列出了我已经尝试过的内容。
Example I (I assumed directories are files in Linux and Java knows this) 示例I(我假设目录是Linux中的文件,而Java知道这一点)
FileUtils.listFiles(new File("/search"),
new NameFileFilter("data"), TrueFileFilter.INSTANCE)
.forEach(System.out::println);
Exampe II 实例二
FileUtils.listFilesAndDirectories(new File("/search"),
new NameFileFilter("data"), TrueFileFilter.INSTANCE)
.forEach(System.out::println);
The above code examples does not print "/search/sub1/data" and /search/sub2/data" like I want them to. FileUtils
is from http://commons.apache.org/proper/commons-io/javadocs/api-release/org/apache/commons/io/FileUtils.html . 上面的代码示例不像我希望的那样打印“ / search / sub1 / data”和“ / search / sub2 / data”
FileUtils
来自http://commons.apache.org/proper/commons-io/javadocs/ api-release / org / apache / commons / io / FileUtils.html 。
Does anyone have a solution? 有没有人有办法解决吗?
You can achieve the same using Java 7 Files.walkFileTree
, PathMatcher
and FileVisitor
like this 您可以使用Java 7
Files.walkFileTree
, PathMatcher
和FileVisitor
来实现相同的目的
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.