最近學會了一個用java遍歷文件目錄,並且在控制檯以樹形結構的方式展開搜索的文件,怕忘記了,所以記錄下來,廢話不再多說,直接上代碼!具體方法,代碼中都有相應的註釋了,這裏就不在重複說明了。若有錯誤,歡迎各位大牛指正!
import java.io.File;
public class Test {
static int dirs = 0;//定義的變量用於存放統計出來的目錄數量和文件數量
static int files = 0;
static long dirLength = 0 ;//定義的變量用於存放統計出來的目錄大小和文件大小
static long fileLength = 0;
static String preStr = "";//定義縮進量,用於以樹形結構展現層級
File f = null;
Test(File f){
this.f = f;
}
public void tree(File f, int level) {
/**
* 由於全局變量在程序銷燬之前,
變量就會一直保存在內存中,這樣就會導致上一次運算的值保留了下來,
再次執行方法的時候就會將值累加,
這樣會導致即使在同一級目錄下的文件也會呈現樹形分級,
因此,此處要定義一個局部變量,
每次執行的時候更新相應的全局變量,因爲局部變量在方法每次執行完的時候被銷燬,
也就是說每次執行該方法的時,這個局部變量都不一定是相同的值,這樣就避免了累加
*/
String preStr = "";
this.preStr=preStr;
for (int i = 0; i < level; i++) {
//判斷level的層級數,每多一層就添加一個間隔
preStr +="\t";
}
//定義文件數組,用存放獲取到的文件目錄和文件
File[] childs = f.listFiles();
for (int i = 0; i < childs.length; i++) {
//用for 循環一個個取出來
//childs[i].isDirectory()用於判斷取取出來的file是文件還是目錄,然後執行相應的操作
if (childs[i].isDirectory()) {
dirs++;//獲取一個目錄就自加一次,記錄數量
}else {
files++;//獲取一個文件就自加一次,記錄數量
fileLength=childs[i].length();//該文件的大小(字節數)
dirLength += childs[i].length();//將獲取到的每個文件的大小(字節數)加起來,記錄整個目錄字節數
}
if (!childs[i].isDirectory()) {
//打印搜索出的文件和目錄,如果是文件就顯示文件字節數
System.out.println(preStr + childs[i].getName()+" "+fileLength+"字節");
}else{
System.out.println(preStr + childs[i].getName());
System.out.println(preStr +"-------------------------");
}
if (childs[i].isDirectory()) {
//判斷是否爲目錄,如果是,再次執行tree()方法,將子目錄裏面的文件再次遍歷出來
tree(childs[i], level + 1);
}
}
}
public static void main(String[] args) {
//給出指定目錄
File f = new File("D:/網頁設計綜合資料");
Test t = new Test(f);
//打印指定目錄,即最頂層目錄
System.out.println("目標目錄:"+f.getName());
//開始遍歷目錄
t.tree(f, 1);
System.out.println("==============================");
//打印目錄數量和字節數
System.out.println("這個目錄中共:"+dirs+"個目錄");
//打印文件數量和字節數
System.out.println("這個目錄中有:"+files+"個文件"+" "+"共"+dirLength+"字節");
//System.out.println("==============================");
}
}
以下是運行效果: