有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java获取结构中无递归的文件数

有没有可能在不迭代所有文件的情况下获得一个文件夹(以及所有子文件夹)中的文件总数,并递归地进行更深入的操作

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

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

  1. # 1 楼答案

    一般来说,最简单的解决方案是最好的。我不会用一个字段来计算应该是函数的结果。如果同时从两个线程调用该方法,可能会得到错误的结果

    static int countFiles(File f) {
        if (f.isDirectory()) {
            int sum = 0;
            for (File fi : f.listFiles()) 
                sum += countFiles(fi);
            return sum;
        }
        return 1;
    }
    
  2. # 2 楼答案

    是的,使用^{}进行迭代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++;
          }
        }
    }
    
  3. # 3 楼答案

    这能达到你的目的吗。它返回Collection<File>