/** */ /** * 作者: 杨帆 * mail: yifi@tom.com * licence: GPL 修改或转发请保留原始作者信息 */ import java.io. * ; import java.util. * ; public class MyTree ... { public static void main(String[] args) ...{ MadeTree mt = new MadeTree(); try ...{ File file = new File(args[0]); if (file.isDirectory() == false) ...{ throw new Exception("不是目录!"); } mt.made(file, 0, new LinkedList()); } catch (Exception e) ...{ System.out.println("用法: java MyTree 目录名"); e.printStackTrace(); } }} class MadeTree ... { public static String signTreeBranch = "├─"; public static String signTreeLastBranch = "└─"; public static String signTreeThroughBranch = "│ "; public static String signTreeNoneBranch = " "; public static boolean isPrintFile = true;//true:显示文件 false:不显示文件 public void made(File file, int num, LinkedList link) ...{ File[] fileArray; if(MadeTree.isPrintFile == true)...{ fileArray = file.listFiles(); }else...{ fileArray = file.listFiles(new MyFileFilter()); } Iterator it = link.iterator(); while (it.hasNext()) ...{ System.out.print(it.next()); } if (fileArray == null) ...{ //说明传进来的是空目录或文件 System.out.println(file.getName()); } else ...{ //说明传进来的是有内容的目录 System.out.println("[" + file.getName() + "]"); //处理下一级目录 if (link != null && link.size() > 0) ...{ //如果父节点是分支则用signTreeThroughBranch代替 if (link.getLast().equals(MadeTree.signTreeBranch)) ...{ link.removeLast(); link.addLast(MadeTree.signTreeThroughBranch); } //如果父节点是末支则用signTreeNoneBranch代替 if (link.getLast().equals(MadeTree.signTreeLastBranch)) ...{ link.removeLast(); link.addLast(MadeTree.signTreeNoneBranch); } } link.addLast(MadeTree.signTreeBranch); for (int i = 0; i < fileArray.length; i++) ...{ if (i != fileArray.length - 1) ...{ //处理成分支 } else ...{ //处理成末支 link.removeLast(); link.addLast(MadeTree.signTreeLastBranch); } //此处要特别注意link是要clone的,要不就共享一个了 made(fileArray[i], num + 1, (LinkedList) link.clone()); } } }} /** */ /** * 文件过滤器,过滤掉不是目录的文件 */ class MyFileFilter implements FileFilter ... { public boolean accept(File pathname) ...{ if (pathname.isDirectory()) ...{ return true; } else ...{ return false; } }}