Red*_*ite 12 java collections multithreading
我使用以下Apache Commons类在Java文件系统中列出文件:
Collection<File> allFiles = FileUtils.listFiles(rootDirectory, null, recursive);
这是一个非常漫长的过程,最多可能需要5分钟.
有什么方法可以在填充时检查集合的大小吗?
我尝试从一个单独的线程访问它,但只是零,直到该过程准备好.
ass*_*ias 11
在从方法获得返回值之前,您将无法在填充时访问该集合,因为您无权访问此方法在内部使用的变量.
您可以通过不使用递归标记将搜索拆分为较小的部分,并自行处理递归以接收每个目录的集合.
如果您使用的是Java 7,更好的选择是使用该FileVisitor界面来浏览文件系统.它有一些回调方法,可以跟踪进度.
您可以使用 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 是更新进度的方法。