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()]);
}
}
网友评论