可能重复:
Is there a workaround for Java's poor performance on walking huge directories?
我创建了一个实用程序,它使用 File.listFiles()函数列出某个目录中的所有文件,但是当我在该目录下复制了大量文件(大约100K)时出现问题。
我正在寻找一些解决方案实际上从该目录和进程中获取一些固定的文件(例如X),然后删除这些文件并获取下一个X数量的文件。 任何人都可以建议我任何解决方案。
此致
答案 0 :(得分:2)
一种解决方案可能是使用FileNameFilter
,在接受一定数量的文件后返回false
,或者如果您准备滥用异常,请抛出Exception
那时候。
class CountedFilter implements FilenameFilter {
int limit = 0;
public CountedFilter ( int limit ) {
this.limit = limit;
}
public boolean accept(File file, String string) {
return limit-- > 0;
}
}
<小时/> 还有另一种选择,其中不太简洁,但我认为更有效。它涉及
FilenameFilter
,它通过BlockingQueue
将每个文件发回给调用者。 File.list
在一个单独的线程中调用,因此您不必等待它完成。
此解决方案的另一个好处是,在File.list
运行时可以处理文件,从而产生更平滑的解决方案,就像迭代器一样。如果受到鼓励,我会将代码作为单独的答案发布。