[英]In java, list all files recursively. but skip one sub-directory
我列出了给定目录中的所有文件名(递归)。 这还包括在子目录中显示文件名。 我如何限制它以不显示一个特定子目录下的文件/目录(跳过一个特定目录)
File file = new File(FILE_PATH);
// Recursively search for all the resource files.
Collection files = FileUtils.listFiles(file, TrueFileFilter.INSTANCE, TrueFileFilter.INSTANCE);
for (Iterator iterator = files.iterator(); iterator.hasNext();)
{
File fileIter = (File) iterator.next();
System.out.println("File = " + fileIter.getPath());
}
Java SE有其自己的方法: Files.walkFileTree 。 您为其传递了FileVisitor(通常是SimpleFileVisitor的子类),每个方法都可以返回FileVisitResult 。 要跳过目录,只需返回FileVisitResult.SKIP_SUBTREE:
Files.walkFileTree(file.toPath(),
new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult preVisitDirectory(Path dir,
BasicFileAttributes attr)
throws IOException {
if (dir.endsWith("forbiddenDir")) {
return FileVisitResult.SKIP_SUBTREE;
}
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFile(Path file,
BasicFileAttributes attr)
throws IOException {
System.out.println("File = " + file);
return FileVisitResult.CONTINUE;
}
});
Path类是过时File类的现代替代品。 您应该避免使用File,因为File的许多方法不能正确报告错误。 如果您绝对需要File对象,则Path具有toFile()方法。 相反,File具有toPath()方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.