更新時間:2022-09-15 來源:黑馬程序員 瀏覽量:
大家好,這篇文章為大家介紹一下怎樣遍歷電腦上的一個文件夾。
通常遍歷文件夾我們都是使用遞歸進行操作,這種方式比較簡單,也比較容易理解,本文的第一種實現(xiàn)也是使用遞歸。然后再為大家介紹另一種不使用遞歸的方式,只用到了循環(huán)和集合,這種方式由于沒有使用遞歸,所以效率更高一些!
整體思路:
public class Demo{
public static void main(String[] args){
//1).使用File封裝初始目錄
File dir = new File("d:\\多級目錄");
//調用遞歸方法
searchFile(dir);
}
//遞歸方法
public static void searchFile(File dir){
//2).打印這個目錄
System.out.println(dir.getAbsolutePath());
//3). 獲取這個目錄下所有的子文件和子目錄的數(shù)組。
File[] files = dir.listFiles();
//4). 遍歷這個數(shù)組,取出每個File對象
if(files != null){
for(File f : files){
//5).判斷這個File是否是一個文件,是:
if(f.isFile()){
//打印
System.out.println(f);
}else{//6).否則就是一個目錄,繼續(xù)遞歸
//遞歸
searchFile(f);
}
}
}
}
} 這種實現(xiàn)方式的核心就是每個目錄都會調用searchFile()方法,而searchFile()方法針對每個目錄的工作都是一樣的:打印目錄、獲取目錄下所偶有的子文件和子目錄的數(shù)組、遍歷數(shù)組......從而形成了遞歸調用。
由于遞歸需要再次調用方法,導致方法入棧,從而降低程序的執(zhí)行效率!
不使用遞歸的思路
1). 取出,并刪除集合中的索引為0的"File對象"(此File對象可能是文件,也可能是目錄)
2). 打印這個File對象。
3). 判斷此File對象是否是"目錄",是:
獲取此目錄下所有子文件和子目錄的File數(shù)組,并添加到這個集合的前面
循環(huán)結束
這個流程用循環(huán)代替了遞歸,每次將目錄的File對象添加到集合,然后再取出,刪除。再獲取這個目錄下所有的子目錄和子文件的數(shù)組,并添加到集合,然后再循環(huán)。最終直至把所有文件都取出,并刪除,打印,集合為空,結束循環(huán)。
/**
* 非遞歸遍歷目錄
* 創(chuàng)建一個List對象,把目錄放到List中
* 循環(huán)遍歷,每次取出第一個元素,如果是目錄就把目錄中的內容放到List最前面,如果不是目錄只取出即可。
*/
public class SearchDir {
public static void main(String[] args) {
File dir = new File("d:\\多級目錄");
searchDir(dir);
}
public static void searchDir(File dir) {
//定義集合
List<File> list = new ArrayList<>();
//將參數(shù)dir對象添加到集合
list.add(dir);
//循環(huán),條件:集合非空
while (!list.isEmpty()) {
//取出,并刪除集合的第一個File對象
File file = list.remove(0);
//打印這個File對象
System.out.println(file.getAbsoluteFile());
//如果此File對象是一個目錄
if(file.isDirectory()) {
//獲取此File對象下所有子文件和子目錄的數(shù)組,并添加到集合的前面
list.addAll(0, Arrays.asList(file.listFiles()));
}
//繼續(xù)下一次循環(huán)......
}
}
}這種方式僅僅用到了集合,沒有使用遞歸,所以占用系統(tǒng)資源較小,效率比較高!是不是很巧妙?大家學會了嗎?
1024首播|39歲程序員逆襲記:不被年齡定義,AI浪潮里再迎春天
2025-10-241024程序員節(jié)丨10年同行,致敬用代碼改變世界的你
2025-10-24【AI設計】北京143期畢業(yè)僅36天,全員拿下高薪offer!黑馬AI設計連續(xù)6期100%高薪就業(yè)
2025-09-19【跨境電商運營】深圳跨境電商運營畢業(yè)22個工作日,就業(yè)率91%+,最高薪資達13500元
2025-09-19【AI運維】鄭州運維1期就業(yè)班,畢業(yè)14個工作日,班級93%同學已拿到Offer, 一線均薪資 1W+
2025-09-19【AI鴻蒙開發(fā)】上海校區(qū)AI鴻蒙開發(fā)4期5期,距離畢業(yè)21天,就業(yè)率91%,平均薪資14046元
2025-09-19