在開發或者面試的過程中,往往會遇到這樣的需求,就是讀取某個目錄下的所有檔案(內容),並且資料夾的層級不固定。基於這樣的情況,博主寫了個對應的demo,以備不時之需。
檔案系統層級關係可以看成是樹形結構,讀取某個目錄下的所有檔案,其實就是遍歷一顆樹,樹的遍歷分為深度優先和廣度優先。對應的,分別寫了兩個小demo。
深度優先
深度優先搜尋演算法(depth-first-search,dfs)是一種用於遍歷或搜尋樹或圖的演算法。沿著樹的深度遍歷樹的節點,盡可能深的搜尋樹的分支。
/**
* 呼叫:readfiletree("d:\\directory");
* @param rootpath
* @throws ioexception
*/public void readfiletree(string rootpath) throws ioexception
system.out.println(rootpath);
fileinputstream is = null;
bufferedreader reader = null;
stringbuilder sb = new stringbuilder();
if (rootfile.isfile())
system.out.println("檔案內容 : " + sb.tostring());
} else
}if (reader != null)
if (is != null)
}
輸出結果:
d:\directory
d:\directory\pkg1
d:\directory\pkg1\pkg1-1
d:\directory\pkg1\pkg1-2
d:\directory\pkg1\pkg1-2\pkg1-2-test.txt
檔案內容 : 對酒當歌,人生幾何。
d:\directory\pkg1\pkg1-3
d:\directory\pkg2
d:\directory\pkg2\pkg2-1
d:\directory\pkg2\pkg2-2
d:\directory\pkg3
d:\directory\pkg3\pkg3-test.txt
檔案內容 : 何以解憂,唯有杜康。
d:\directory\pkg4
d:\directory\pkg4\pkg4-1
d:\directory\pkg4\pkg4-1\pkg-4-1-test.txt
檔案內容 : 月明星稀,烏鵲南飛。
從輸出結果可以看出是深度優先。
廣度優先
廣度優先搜尋演算法(breadth-first-search,縮寫為bfs),又譯作寬度優先搜尋,或橫向優先搜尋,是一種圖形搜尋演算法。簡單的說,bfs是從根節點開始,沿著樹的寬度遍歷樹的節點。如果所有節點均被訪問,則演算法中止。
private static queuepathqueue = new linkedlist<>();
public synchronized void readfiletree(string rootpath) throws ioexception
system.out.println(rootpath);
fileinputstream is = null;
bufferedreader reader = null;
stringbuilder sb = new stringbuilder();
if (rootfile.isfile())
system.out.println("檔案內容 : " + sb.tostring());
} else
}//佇列非空時,取出path讀取
while (!pathqueue.isempty())
if (reader != null)
if (is != null)
}
輸出結果:
d:\directory
d:\directory\pkg1
d:\directory\pkg2
d:\directory\pkg3
d:\directory\pkg4
d:\directory\pkg1\pkg1-1
d:\directory\pkg1\pkg1-2
d:\directory\pkg1\pkg1-3
d:\directory\pkg2\pkg2-1
d:\directory\pkg2\pkg2-2
d:\directory\pkg3\pkg3-test.txt
檔案內容 : 何以解憂,唯有杜康。
d:\directory\pkg4\pkg4-1
d:\directory\pkg1\pkg1-2\pkg1-2-test.txt
檔案內容 : 對酒當歌,人生幾何。
d:\directory\pkg4\pkg4-1\pkg-4-1-test.txt
檔案內容 : 月明星稀,烏鵲南飛。
從輸出結果可以看出,搜尋是按照層次來遍歷的,即廣度優先。
博主演算法渣,如果各位同學有更優雅的實現方式,還請不吝賜教。
C 讀取指定檔案目錄下的所有檔名
string file 你要查詢的檔名 1 使用c 獲取指定目錄下的所有檔名稱,實際 如下 string filepath 等到的完整的檔名 string filenames directory.getfiles f dfasfafaf searchoption.alldirectories 獲取目...
MATLAB讀取指定目錄下的所有檔名 檔案操作
1 讀取指定目錄下的所有符合相應字尾的檔案的名字。filepath original ply diroutput dir fullfile filepath,ply plyname 其中.是指當前目錄的上一級目錄,ply 是正規表示式,只反饋出符合這個字尾的檔案的名字。plyname便是檔案名字的元...
遍歷輸出指定目錄下的所有檔案
opendir readdir closedir 這三個函式主要用來遍歷目錄。在使用這三個函式前必須先包括 以下兩個標頭檔案 include include opendir 函式的原型為 dir opendir const char name 它返回乙個 dir 型別,這就是乙個控制代碼啦,你不用管...