[英]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.