java File按層級目錄列印資料夾內容
阿新 • • 發佈:2018-11-27
將指定目錄下的所有檔案和資料夾的名字按層級關係列印,也可以從控制檯獲取需要列印的目錄
按照如下樣式:
world
1.txt
2.txt
3.txt
4.txt
5.txt
6.txt
hello.txt
javaSpring.txt
javaSpring.txt.bak
新建資料夾
101.txt
102.txt
檔案2
資料夾1
201.txt
讀取碟符根目錄時,有些檔案不可訪問,或者隱藏型別的,不處理會出現空指標異常,需要加入空指標判斷的操作
import java.io.File; import java.util.Scanner; //從鍵盤接收一個路徑,按層級結構列印資料夾內容 public class FileTest06 { public static int count=1; public static void main(String[] args){ File f= getFile(); System.out.println( f.getName()); printFileByLine(f); } public static void printFileByLine(File f) { File[] fileArr = f.listFiles(); if (fileArr==null) { //如果該處檔案不可訪問,會出現空指標異常,在讀取碟符根目錄時,一般會出現空指標,要預防 return ; } if (fileArr.length==0){ //判斷如果目錄為空時,count計數自減,減小縮排 count--; return; } for (int i = 0; i < fileArr.length; i++) { //列印縮排 for (int j = 0; j < count; j++) { System.out.print("\t"); } //列印檔名字 if (fileArr[i].isFile()) { System.out.println(fileArr[i].getName()); } //判斷,當達到檔案的結尾並且最後一個不是資料夾的時候,count自減 if (i==fileArr.length-1&&!fileArr[i].isDirectory()){ count--; } if (fileArr[i].isDirectory()) { //如果是資料夾,count自加,擴大縮排 System.out.println(fileArr[i].getName() ); count++; printFileByLine(fileArr[i]); } } } public static File getFile() { //從鍵盤接收一個路徑 Scanner scanner=new Scanner(System.in); System.out.println( "請輸入一個路徑:"); while(true) { String path = scanner.nextLine(); File file = new File(path); if (!file.exists()) { System.out.println("輸入路徑錯誤,請重新輸入"); } else if (file.isFile()) { System.out.println("您輸入的是一個檔案,路徑為: " + file.getAbsolutePath()); } else { return file; } } } } out: world 1.txt 2.txt 3.txt 4.txt 5.txt 6.txt hello.txt javaSpring.txt javaSpring.txt.bak 新建資料夾 101.txt 102.txt 檔案2 資料夾1 201.txt