題目:給定一個目錄,要求輸出這個目錄下面的子目錄和子文件
邏輯:
- 先判斷給定的是不是一個合法的目錄,如果不是,則提示給定錯誤
- 如果是目錄,那么使用File.listFile()獲得這個目錄下文件名的數組
- 循環遍歷輸出這個數組元素
- 輸出名稱之后,接着判斷這個元素是文件還是目錄
- 如果是目錄,繼續調用本方法來輸出子目錄
代碼如下:
/** * 輸出指定目錄下的所有子目錄和子文件 * * @author LGB * */ public class HelloFile { public static void main(String[] args) { printFile(new File("D:\\test")); } public static void printFile(File file) { if (file.isFile()) { System.out.println("您給定的是一個文件"); // 判斷給定目錄是否是一個合法的目錄,如果不是,輸出提示 } else { File[] fileLists = file.listFiles(); // 如果是目錄,獲取該目錄下的內容集合 for (int i = 0; i < fileLists.length; i++) { // 循環遍歷這個集合內容 System.out.println(fileLists[i].getName()); //輸出元素名稱 if (fileLists[i].isDirectory()) { //判斷元素是不是一個目錄 printFile(fileLists[i]); //如果是目錄,繼續調用本方法來輸出其子目錄 } } } } }
執行成功,結果正確,但是樣子太丑陋了,如圖
我們還需要加上縮進改造一下
public class HelloFile { public static void main(String[] args) { printFile(new File("D:\\test"),1); } public static void printFile(File file,int tab) { if (file.isFile()) { System.out.println("您給定的是一個文件"); // 判斷給定目錄是否是一個合法的目錄,如果不是,輸出提示 } else { File[] fileLists = file.listFiles(); // 如果是目錄,獲取該目錄下的內容集合 for (int i = 0; i < fileLists.length; i++) { // 循環遍歷這個集合內容 for (int j = 0; j < tab; j++) { //輸出縮進 System.out.print("|---"); } System.out.println(fileLists[i].getName()); //輸出元素名稱 if (fileLists[i].isDirectory()) { //判斷元素是不是一個目錄 printFile(fileLists[i],tab+1); //如果是目錄,繼續調用本方法來輸出其子目錄,因為是其子目錄,所以縮進次數 + 1 } } } } }
結果為: