1. 程式人生 > >java File按層級目錄列印資料夾內容

java File按層級目錄列印資料夾內容

將指定目錄下的所有檔案和資料夾的名字按層級關係列印,也可以從控制檯獲取需要列印的目錄

按照如下樣式:

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

參考:http://www.monkey1024.com/javase/638