1. 程式人生 > >46、練習:輸出指定目錄下的所有檔名稱

46、練習:輸出指定目錄下的所有檔名稱

問題:從鍵盤接收一個路徑,將這個路徑下的所有檔案和資料夾的名字按照層級列印。
例如:

monkey1024
          java
              XXX.java
              XXX.jpg
          php
              XXX.php
          readme.txt

分析:獲取路徑File物件中的File陣列
遍歷陣列,取得File物件
列印檔案或資料夾的名字
如果是一個資料夾的話,使用遞迴重複上面的操作

程式碼:

package com.monkey1024.exercise;

import java.io.File;
import java.util.Scanner; public class FileNames { //用來記錄縮排的次數 private static int count = 0; public static void main(String[] args) { File file = getFile(); getFileNames(file); } //每次呼叫該方法時,說明進入到一個新的資料夾的內部,需要增加一個縮排 private static void getFileNames(File file) {
//獲取路徑File物件中的File陣列 File[] fileArray = file.listFiles(); //遍歷陣列,取得File物件 for(int i=0; i<fileArray.length; i++){ //通過遍歷count來控制列印幾個縮排 for(int j=0; j<count; j++){ System.out.print("\t"); } //列印檔案或資料夾的名字 System.out.println(fileArray[i]);
//陣列遍歷完最後一個File物件時,說明當前資料夾已經遍歷結束,需要做自減運算 if(i == fileArray.length-1 && !fileArray[i].isDirectory()){ count--; } //如果是一個資料夾的話,使用遞迴重複上面的操作 if(fileArray[i].isDirectory()){ count++; getFileNames(fileArray[i]); } } } //獲取使用者輸入路徑的File物件 private static File getFile() { System.out.println("請輸入一個資料夾路徑:"); Scanner sc = new Scanner(System.in); //獲取使用者輸入的路徑,使用者輸入的路徑有可能是錯誤的,需要進行判斷 while(true){ String input = sc.nextLine(); File file = new File(input); if(!file.exists()){ System.out.println("您輸入的檔案路徑有誤,請重新輸入檔案路徑:"); }else if(file.isFile()){ //如果使用者輸入的路徑是一個檔案 System.out.println("您輸入的路徑是一個檔案,請輸入一個資料夾的路徑"); }else{ return file; } } } }