使用Files
和Path
来自 java.nio API 而不是File
.
您还可以将它们与 Java 8 中的 Stream 一起使用:
Path folder = Paths.get("...");
List<Path> collect = Files.walk(folder)
.filter(p -> Files.isRegularFile(p) && p.getFileName().toString().contains("key1"))
.limit(50)
.collect(Collectors.toList());
在 Java 7 中,您可以通过使用一个实现来停止文件遍历,该SimpleFileVisitor
实现会在 50 个文件与谓词匹配时终止:
List<Path> filteredFiles = new ArrayList<>();
SimpleFileVisitor<Path> visitor = new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
if (Files.isRegularFile(file) && file.getFileName()
.toString()
.contains("key1")) {
filteredFiles.add(file);
}
if (filteredFiles.size() == 50) {
return FileVisitResult.TERMINATE;
}
return super.visitFile(file, attrs);
}
};
以及如何使用它:
final Path folder = Paths.get("...");
// no limitation in the walking depth
Files.walkFileTree(folder, visitor);
// limit the walking depth to 1 level
Files.walkFileTree(folder, new HashSet<>(), 1, visitor);