Demo 1:
Demo 2:
package vamdt.io;
import java.io.*;;
public class TestFile {
public static void main(String[] args) {
list("E:/BOOK");
}
/**
*
* @param path 将要罗列出结构的路径
* @param level 记录目录层次
*/
public static void list(String path) {
File file = new File(path);
System.out.println(file.getName());
list(file, 1);
}
private static void list(File file, int level) {
//判断目录是否存在
if (!file.exists())
System.out.println("目录不存在");
String pre = "";
for (int i=0; i<level; i++)
pre += " ";
// System.out.println("pre:" + pre + "Over");
File[] childs = file.listFiles();
for (int i=0; i<childs.length; i++) {
System.out.println(pre + childs[i].getName());
if (childs[i].isDirectory())
list(childs[i], level+1);
}
}
}
Demo 2:
package vamdt.io;
import java.io.File;
import java.util.LinkedList;
public class ListAllFiles {
private static int level;
public static void listAll(File file) {
//若传入的是文件或者目录内无文件则返回
if (file.isFile() || 0 == file.listFiles().length) {
return;
}
File[] files = file.listFiles();
files = sort(files);
for (File f : files) {
StringBuilder sb = new StringBuilder("");
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);
//若是目录,则需进行递归处理,低前先把目录层次加一
//递归完成之后,需要设置把目录曾自减一
if(f.isDirectory()) {
level++;
listAll(f);
level--;
}
}
}
//设定tab的多少,即目录层次
private static String getTAB(int level) {
String tab = "";
for (int i=0; i<level; i++)
tab += "\t";
return tab;
}
//按照目录在上,名字在下的方式进行排序
private static File[] sort(File[] file) {
LinkedList<File> list = new LinkedList<File>();
for (File f : file) {
//把目录加在开头,文件加在结尾
if(f.isDirectory())
list.addFirst(f);
else
list.addLast(f);
}
//转换为数组返回
return list.toArray(new File[file.length]);
}
public static void main(String[] args) {
File f = new File("E:/BOOK");
listAll(f);
}
}