在没有递归的情况下获取结构中的文件数

时间:2012-09-19 10:41:08

标签: java file

是否可以获取文件夹(以及所有子*文件夹)中文件的总数而不迭代所有文件,并进行更深入的递归?

我的意思是这很容易,但也许有更好的解决方案?

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)。

3 个答案:

答案 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>