【小程序】递归实现控制台输出的文件树形结构
要求:给定任意一个目录,以树形方式展现出该目录中的所有子目录和文件,另外展现的时候目录在上面,文件在下面,每一层有缩进。
代码:
package myfiles; import java.io.File; import java.util.ArrayList; import java.util.List; import org.junit.Test; /** * * 项目名称:FileTest * 类名称:TreeFile * 类描述:将制定目录下得所有子目录和文件按树形输出 * 创建时间:2011-10-19 下午8:22:40 * 修改时间:2011-10-19 下午8:22:40 * 修改备注: * @version * */ public class TreeFile { //控制tab键产生树形结构 private static int time; @Test public static void deepList(File file) { //若为文件或者是空目录 if(file.isFile() || 0==file.list().length) { return; } else { File[] files = file.listFiles(); //排序 files = sort(files); //遍历排好序的文件数组,打印当前文件或目录名,然后递归目录 for(File f : files) { StringBuffer output = new StringBuffer(); output.append(getTime(time)); output.append(f.getName()); System.out.println(output.toString()); if(f.isDirectory()) { time++; deepList(f); time--; } } } } //整理文件数组,按先目录,后文件的方式排序 private static File[] sort(File[] files) { List<File> list = new ArrayList<File>(); for(File file : files) { if(file.isDirectory()) { list.add(file); } } for(File file : files) { if(file.isFile()) { list.add(file); } } return list.toArray(new File[files.length]); } //输出TAB,树形结构缩进 private static String getTime(int time) { StringBuffer sb = new StringBuffer(); for(int i = 0; i<time;i++) { sb.append(" "); } return sb.toString(); } }