遍歷文件目錄,需要進行遞歸輸出子目錄中的文件。遍歷目錄,判斷是否是文件比較簡單,主要是輸出格式的控制。這裏採用一個fileLevel來表示文件的層數,用於輸出時的縮進
import java.io.File;
public class ReadDirectory {
// 文件所在的層數
private int fileLevel;
/**
* 生成輸出格式
* @param name 輸出的文件名或目錄名
* @param level 輸出的文件名或者目錄名所在的層次
* @return 輸出的字符串
*/
public String createPrintStr(String name, int level) {
// 輸出的前綴
String printStr = "";
// 按層次進行縮進
for (int i = 0; i < level; i ++) {
printStr = printStr + " ";
}
printStr = printStr + "- " + name;
return printStr;
}
/**
* 輸出初始給定的目錄
* @param dirPath 給定的目錄
*/
public void printDir(String dirPath){
// 將給定的目錄進行分割
String[] dirNameList = dirPath.split("\\\\");
// 設定文件level的base
fileLevel = dirNameList.length;
// 按格式輸出
for (int i = 0; i < dirNameList.length; i ++) {
System.out.println(createPrintStr(dirNameList[i], i));
}
}
/**
* 輸出給定目錄下的文件,包括子目錄中的文件
* @param dirPath 給定的目錄
*/
public void readFile(String dirPath) {
// 建立當前目錄中文件的File對象
File file = new File(dirPath);
// 取得代表目錄中所有文件的File對象數組
File[] list = file.listFiles();
// 遍歷file數組
for (int i = 0; i < list.length; i++) {
if (list.isDirectory()) {
System.out.println(createPrintStr(list.getName(), fileLevel));
fileLevel ++;
// 遞歸子目錄
readFile(list.getPath());
fileLevel --;
} else {
System.out.println(createPrintStr(list.getName(), fileLevel));
}
}
}
public static void main(String[] args) {
ReadDirectory rd = new ReadDirectory();
String dirPath = "D:\\有道詞典";
rd.printDir(dirPath);
rd.readFile(dirPath);
}
}
輸出結果如下: