以递归方式获取Java中的目录及其子目录中的所有文件

K M*_*hta 13 java directory file subdirectory

我试图获取目录及其子目录中的所有文件的列表.我目前的递归方法如下:

private void printFiles(File dir) {
  for (File child : dir.listFiles()) {
    if (child.isDirectory()) {
      printFiles(child);
    } else if (child.isFile()) {
      System.out.println(child.getPath());
    }
  }
}

printFiles(new File("somedir/somedir2"));
Run Code Online (Sandbox Code Playgroud)

但是,我希望有一种非递归方式(可能是现有的API调用).如果没有,这是最干净的方式吗?

Rya*_*oss 26

您始终可以使用堆栈(对于DFS)或队列(对于BFS)使用迭代解决方案替换递归解决方案:

private void printFiles(File dir) {
  Stack<File> stack = new Stack<File>();
  stack.push(dir);
  while(!stack.isEmpty()) {
    File child = stack.pop();
    if (child.isDirectory()) {
      for(File f : child.listFiles()) stack.push(f);
    } else if (child.isFile()) {
      System.out.println(child.getPath());
    }
  }
}

printFiles(new File("abc/def.ghi"));
Run Code Online (Sandbox Code Playgroud)

  • 两者,速度,以及递归必须存储整个函数的状态(在我的问题中已被删除以便在SO上发布它的目的)的事实,而使用这种方法,我只保存堆栈上的文件对象 (2认同)