java實現遍歷檔案目錄,並在控制檯以樹形結構展示
阿新 • • 發佈:2018-12-17
package www.tree.cn; import java.io.File; /** * @Author:DAVEZJ * @Date: Created in 18:07 2018/10/27 * @E-Mail: * 一個用java遍歷檔案目錄,並且在控制檯以樹形結構的方式展開搜尋的檔案 */ public class treeALL { static int dirs = 0;//定義的變數用於存放統計出來的目錄數量和檔案數量 static int files = 0; static long dirLength = 0;//定義的變數用於存放統計出來的目錄大小和檔案大小 static long fileLength = 0; static String preStr = "";//定義縮排量,用於以樹形結構展現層級 File f = null; treeALL(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();//listFiles()方法是返回某個目錄下所有檔案和目錄的絕對路徑,返回的是File陣列 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("G:/Download"); treeALL t = new treeALL(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("=============================="); } }