java - 如何从目录中获取特定数量的文件?

标签 java file java-7 filefilter

<分区>

我想根据我在 properties 文件中提供的设置检索文件。 例如我只想在第一次迭代中获取 50 个文件并停止获取所有文件,可能文件夹中有数千个文件。

我怎样才能随机获取 50 个文件而不获取所有列表或遍历文件以获得 50 个文件?

filesList = folder.listFiles( new FileFilter() {                
    @Override
    public boolean accept(File name) {                      
        return (name.isFile() && ( name.getName().contains("key1")));
    }
});

编辑:我删除了for 语句。即使我只提供了一个要从中获取的文件夹,它也会获取所有文件,计数器变量仍然循环遍历文件夹中的所有文件,这不是一个好的解决方案。

最佳答案

使用 java.nio API 中的 FilesPath 而不是 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); 

关于java - 如何从目录中获取特定数量的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48765712/

相关文章:

java - 网页: accessing local file of the client/Alternatives to Silverlight/Java Applets

java - Spring bean编译所有正则表达式

java - 在 Android 中移动和重命名文件

java - 在 Java 中用字符串切换大小写 - 垃圾?

java - 小程序有时会自动关闭

java - Java如何根据元素值获取数组的索引

Java 函数指针和自动装箱

java - 在java中拆分解析文本文件

c++ - 为什么 getline(cin, string_name) 在我第一次在循环中使用它时会创建一个空字符串?

java.nio.file.FileAlreadyExistsException 如何在 java7 中解决这个问题