package testProject;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
public class IoFileTest {
public static void main(String[] args) {
IteratorUtil.IteratorDir(new File("/home/zhaohy/Music"));
}
}
class IteratorUtil{
private static int level = 0;//层级数
public static void IteratorDir(File file) {
if(file != null) {
//找出递归的出口
//假设是文件或者是空文件夹就返回
if(file.isFile() || file.listFiles().length == 0) {
return;
} else {
File[] files = file.listFiles();
//要求是先输出文件夹再输出文件
files = sort(files);
for(File f : files) {
StringBuffer sb = new StringBuffer();
if(f.isFile()) {
sb.append(getTab(level));
sb.append(f.getName());
} else {
sb.append(getTab(level));
sb.append(f.getName());
sb.append("\\");
}
System.out.println(sb.toString());
//假如是文件夹
if(f.isDirectory()) {
level++;//进入目录遍历,层级加一
IteratorDir(f);//递归调用遍历目录的方法
level--;//目录层级减一 返回上一级目录 继续打印输出
}
}
}
}
}
/**
* 根据层级数返回制表符\t所组成的字符串
* @param level
* @return
*/
private static String getTab(int level) {
StringBuffer sb = new StringBuffer();
for(int i = 0; i < level; i++) {
sb.append("\t");
}
return sb.toString();
}
/**
* 给file数组排序 先放文件夹再放文件
* @param files
* @return
*/
private static File[] sort(File[] files) {
List<File> fList = new ArrayList<File>();
//先存放文件夹
for(File f : files) {
if(f.isDirectory()) {
fList.add(f);
}
}
//再存放文件
for(File f :files) {
if(f.isFile()) {
fList.add(f);
}
}
return fList.toArray(new File[fList.size()]);
}
}
递归实例:按层级打印文件夹目录实例
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 1.在终端中cd到指定的文件夹目录路径中2、输入以下命令进行打印目录结构树: 大千世界,求同存异;相遇是缘,相识是...
- 有个需求,即想表达一个目录结构,但又不想截图用图片的方式。有些同学可能在一些技术博客中看到这样的表达: blog├...