簡體   English   中英

以遞歸方式獲取Java中的目錄及其子目錄中的所有文件

[英]Non-recursive way to get all files in a directory and its subdirectories in Java

我試圖獲取目錄及其子目錄中的所有文件的列表。 我目前的遞歸方法如下:

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"));

但是,我希望有一種非遞歸方式(可能是現有的API調用)。 如果沒有,這是最干凈的方式嗎?

您始終可以使用堆棧(對於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"));

從Java 8開始,您可以使用Files#walk在給定目錄中遞歸列出所有文件和目錄。 此外,如果只需要常規文件,可以應用像Files::isRegularFile這樣的過濾器來過濾掉目錄。

另一方面,如果您只需要列出給定目錄而不是其子目錄,則可以使用惰性方法Files#list ,它只會為您提供給定目錄中的文件和目錄。 您可以再次應用上述過濾器。

FileUtils可能是最好的方法。 (鏈接問題的復制)僅發布,因此搜索此內容的人會看到它並且可能不會閱讀評論

編輯:要使用的方法Listfiles

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM