是否可以获取文件夹(以及所有子*文件夹)中文件的总数而不迭代所有文件,并进行更深入的递归?
我的意思是这很容易,但也许有更好的解决方案?
private int totalFileCounter = 0;
private void countFiles(File f) {
if (f.isDirectory()) {
for (File fi : f.listFiles()) {
countFiles(fi);
}
} else {
totalFileCounter++;
}
}
编辑:好吧也许我的问题不是那么好问...我的意思是有没有来自java或文件系统的任何功能或其他允许我获取O(1)中的文件总数的东西?所有解决方案现在都有运行时O(n)。
答案 0 :(得分:1)
通常最简单的解决方案是最好的。我不会使用字段来计算应该是函数的结果。如果同时从两个线程调用该方法,则可能会得到不正确的结果。
static int countFiles(File f) {
if (f.isDirectory()) {
int sum = 0;
for (File fi : f.listFiles())
sum += countFiles(fi);
return sum;
}
return 1;
}
答案 1 :(得分:0)
是的,使用Queue
进行迭代breadth-first search。这是一个例子(未经测试):
private void countFiles(File f) {
Queue<File> queue = new LinkedList<File>();
queue.add(f);
while (!queue.isEmpty()) {
File file = queue.poll();
if (file.isDirectory()) {
queue.addAll(Arrays.asList(file.listFiles()));
} else {
totalFileCounter++;
}
}
}
答案 2 :(得分:0)
Apache Commons API可以满足您的目的吗?它返回Collection<File>