我可以在填充时检查集合的大小

Red*_*ite 12 java collections multithreading

我使用以下Apache Commons类在Java文件系统中列出文件:

Collection<File> allFiles = FileUtils.listFiles(rootDirectory, null, recursive);

这是一个非常漫长的过程,最多可能需要5分钟.

有什么方法可以在填充时检查集合的大小吗?

我尝试从一个单独的线程访问它,但只是零,直到该过程准备好.

ass*_*ias 11

在从方法获得返回值之前,您将无法在填充时访问该集合,因为您无权访问此方法在内部使用的变量.

您可以通过不使用递归标记将搜索拆分为较小的部分,并自行处理递归以接收每个目录的集合.

如果您使用的是Java 7,更好的选择是使用FileVisitor界面来浏览文件系统.它有一些回调方法,可以跟踪进度.


Rog*_*sjö 2

您可以使用 FileUtils IOFileFilter。

Collection<File> listFiles = FileUtils.listFiles(new File("."), counter, FileFilterUtils.trueFileFilter());
Run Code Online (Sandbox Code Playgroud)

柜台在哪里

IOFileFilter counter = new IOFileFilter() {

    @Override
    public boolean accept(File arg0, String arg1) {
        countCall();
        return true;
    }

    @Override
    public boolean accept(File arg0) {
        countCall();
        return true;
    }
};
Run Code Online (Sandbox Code Playgroud)

countCall 是更新进度的方法。