/*
*需求:對指定目錄進行所有內容的列出(包含子目錄中的內容)
*也可以理解爲深度遍歷
*分析:listFiles方法只會列出當前目錄下的所有文件
*但是如果需要訪問當前目錄下的文件下的文件,
* 那還要對listFiles方法
*進一步操作
*
*/
public class FileTest {
public static void main(String[] args) {
//1,建立當前文件
File file = new File("demodir");
//2,需要進行擴展,用函數封裝起來
enlistAll(file,0);
}
public static void listAll(File file) {
/*
* listFiles方法返回一個File對象數組,
* 將當前目錄下所有文件封裝成file對象
* 這樣不僅僅侷限於對文件名的操作。
*/
/*
* 3,分析過程,思考過程
*
*/
/*File[] dir = file.listFiles();
for(File name:dir){
if(name.isDirectory()){//判斷是否是目錄
//如果是目錄,就繼續遍歷
File[] dir2 = name.listFiles();
for(File name2:dir2){
if(name.isDirectory()){.....};
* 寫到這發現端倪了,如果還是目錄還要繼續遍歷
* 我們發現,我們再重複調用這個函數,
* 想到要用到遞歸!
}
}
//無論是否是目錄都要打印出文件名
System.out.println(name);
}*/
}
/*
*重新建立這個函數,加個參數level 用來表示層級關係
*/
public static void enlistAll(File file,int level) {
//每調用一次就打印一次這個文件 getspace方法是爲了區別層級而設的
System.out.println(getSpace(level)+file.getName());
level++;
File[] dir = file.listFiles();
for(File name:dir){
//判斷是否是目錄,是就重複進行,調用當前函數(遞歸)
if(name.isDirectory()){
enlistAll(name,level);
}else{
System.out.println(getSpace(level)+name.getName());
}
}
}
public static String getSpace(int level ) {
StringBuilder sb = new StringBuilder();
sb.append("|----");
for(int i = 0;i<level;i++){
sb.insert(0," ");
}
return sb.toString();
}}
打印效果