package io;
import java.io.File;
/*
* 需求:对指定的目录进行所有内容的列出(包含子目录中的内容),也可以理解为深度遍历.
* 注意不要去遍历:C盘因为它里边有许多系统目录,没有权限访问,会产生空指针,
* 也不要遍历其他系统根目录如d:\\或e:\\因为:它们之中如果有系统文件也会产生空指针.
*
*/
public class _18Filetest {
public static void main(String[] args) {
File dir=new File("D:\\Music");
listAll(dir,0);
}
/* 深度遍历文件夹:按如下的格式输出.
*
* |--Music
* | |--KwDownload.txt
* | |--L-聆听
* | | |--100413
* | | | |--002-I believe I can fly.lrc
* | | | |--002-I believe I can fly.mp3
*
*/
private static void listAll(File dir,int level) {
System.out.println(getSpace(level)+dir.getName());
level++;
//获取指定目录下当前的所有文件夹或者文件对象.
//listFiles()方法返回的是File对象,对象中封装了许多有用信息.而list只得到String类型的文件名.
//listFiles()方法返回的时当前目录下的所有文件和目录对象,所以要想深度遍历必须使用递归调用.
File[] files=dir.listFiles();
//对于数组的遍历如果不想操作脚标就使用foreach.如果想就使用for.
for(int i=0;i<files.length;i++){
if(files[i].isDirectory()){
listAll(files[i],level);
}else{
System.out.println(getSpace(level)+files[i].getName());
}
}
}
private static String getSpace(int level){
StringBuilder sb=new StringBuilder();
sb.append("|--");
for(int i=0;i<level;i++){
sb.insert(0, "| ");//在字符串的最前面加入"| "
}
return sb.toString();
}
}
|