模仿 win2000 的 tree.exe 做了一个,目录对齐线那里还有点问题
你先将就一下吧
=======================================================
/**
     [Tree.java]
     
以图形显示驱动器或路径的文件夹结构。TREE [drive:][path] [/F] [/A]   /F   显示每个文件夹中文件的名称。
   /A   使用 ASCII 字符,而不使用扩展字符。 * Windows TREE 功能 Java版实现
 * 创建日期:(2003-8-6)
 * @author:ONE_Fox
 * @author:[email protected]
 */import java.io.*;
import java.util.Vector;
public class Tree {
    
    //参数标记--------------------//
    public static int Tree_F = 1;
    public static int Tree_A = 2;
    public static int Tree_F_A = 3;
    
    //配置信息--------------------//
    private File path = new File("."); //路径
    private File outFile = new File("outFile.txt"); //输出文件
    private PrintWriter writeFile = null;  //输出文件流
    private Vector tmpOut = new Vector(20); //文件输出缓存
    private String dirPoint = "└─";
    private String dirPointX = "├─";
    private String filePoint = "│  ";
    private boolean searchModen = false; //是否显示文件
    
    
/**
* 构造方法:Tree(File path, int moden) 
* @param path 路径 java.io.File
* @param moden 参数 int
*/
    public Tree(File path, int moden) {
        //参数配置------------------------//
        this.path = path;
        if(moden == Tree_F)
            searchModen = true;
        else if(moden == Tree_A) {
            dirPoint = "\\---";
            dirPointX = "+---";
            filePoint = "|   ";
        }
        else if(moden == Tree_F_A) {
            searchModen = true;
            dirPoint = "\\---";
            dirPointX = "+---";
            filePoint = "|   ";
        }
        /*
        else {
            System.out.println("参数错误!");
            System.exit(0);
        } */
        
        //遍历开始------------------------//
        searchDir(path, 0); 
    }
    
/**
* 方法:searchDir(File dir, int deep) 
* 遍历一个文件夹的文件&文件夹
* @param dir 文件夹 java.io.File
* @param deep 目录深度 int
*/
private void searchDir(File dir, int deep) {
    StringBuffer outStr = new StringBuffer("");
    File fileList[] = dir.listFiles();
    boolean hasDirectory = false;
    File lastDirectory = null;
    
    //搜索是否有子目录----------------//
    for(int i = 0; i < fileList.length; i++)
        if(fileList[i].isDirectory()) {
            hasDirectory = true;
            lastDirectory = fileList[i];
        }
        
    //打印文件名----------------------//
    if(searchModen == true) {
        for(int i = 0; i < fileList.length; i++) {
            if(fileList[i].isFile()) {
                outStr = new StringBuffer("");
                for(int j = 0; j < deep; j++)
                    outStr.append(filePoint);
                outStr.append((hasDirectory?filePoint:"    ") 
                                       + fileList[i].getName());
                System.out.println("" + outStr);
                tmpOut.add("" + outStr);
            }
        }
    }
    
    //打印子目录----------------------//
    for(int i = 0; i < fileList.length; i++) {
        if(fileList[i].isDirectory()) {
            outStr = new StringBuffer("");
            for(int j = 0; j < deep; j++)
                outStr.append(filePoint);
            outStr.append((lastDirectory.equals(fileList[i])?dirPoint:dirPointX)
                           + fileList[i].getName());
            System.out.println("" + outStr);
            tmpOut.add("" + outStr);
            searchDir(fileList[i], (deep + 1)); //递归遍历子目录
        }
    }
}/**
* 程序入口:
*/ 
    public static void main(String args[]) {
        
        //参数分析------------------------//
        switch(1) {
            case 1:
                if(args.length == 0) {
                    new Tree(new File("."), 0);
                    break;
                }
                
            case 2:
                if(args.length == 1) {
                    String parameter = args[0];
                    if(new File(parameter).isDirectory()) {
                        new Tree(new File(parameter), 0);
                        break;
                    }
                    else if(parameter.compareToIgnoreCase("/F") == 0) {
                        new Tree(new File("."), Tree.Tree_F);
                        break;
                    }
                    else if(parameter.compareToIgnoreCase("/A") == 0) {
                        new Tree(new File("."), Tree.Tree_A);
                        break;
                    }
                    else if(parameter.compareToIgnoreCase("/h") == 0) {
                        System.out.println("以图形显示驱动器或路径的文件夹结构。\n\n"
                                          +"TREE [drive:][path] [/F] [/A]\n\n"
                                          +"   /F   显示每个文件夹中文件的名称。\n"
                                          +"   /A   使用 ASCII 字符,而不使用扩展字符。\n");
                        break;
                    }
                    else {
                        System.out.println("无效命令选项 - " + parameter);
                        break;
                    }
                }
                
            case 3:
                if(args.length == 2) {
                    String parameter1 = args[0];
                    String parameter2 = args[1];
                    if(new File(parameter1).isDirectory()) {
                        if(parameter2.compareToIgnoreCase("/F") == 0) {
                            new Tree(new File(parameter1), Tree.Tree_F);
                            break;
                        }
                        else if(parameter2.compareToIgnoreCase("/A") == 0) {
                            new Tree(new File(parameter1), Tree.Tree_A);
                            break;
                        }
                        else {
                            System.out.println("无效命令选项 - " 
                                              + parameter1 + " " + parameter2);
                            break;
                        }
                    }
                    else if(parameter1.compareToIgnoreCase("/F") == 0
                          && parameter2.compareToIgnoreCase("/A") == 0) {
                        new Tree(new File("."), Tree.Tree_F_A);
                        break;
                    }
                    else {
                        System.out.println("无效命令选项 - " 
                                              + parameter1 + " " + parameter2);
                        break;
                    }
                }
            
            case 4:
                if(args.length == 3) {
                    String parameter1 = args[0];
                    String parameter2 = args[1];
                    String parameter3 = args[2];
                    if(new File(parameter1).isDirectory() 
                                 && parameter2.compareToIgnoreCase("/F") == 0
                                 && parameter3.compareToIgnoreCase("/A") == 0) {
                        new Tree(new File(parameter1), Tree.Tree_F_A);
                        break;
                    }
                    else {
                        System.out.println("无效命令选项 - " 
                                              + parameter1 + " " + parameter2
                                              + " " + parameter3);
                        break;
                    }
                }
           default:
               System.out.println("太多命令选项");
               break;
        }
    }
}

解决方案 »

  1.   

    【Sorry 保存文件那段忘记加了。 用这个】
    遍历返回结果保存在当前目录的 outFile.txt 里
    如果目录里文件、文件夹太多的话前面的会看不到,所以也输出到 outFile.txt
    =====================================================================晕~ 帖子太长了! 链接↓(放一星期)
    http://my.nbip.net/homepage/zhouB403/MyCode/TREE.rar
      

  2.   

    谢谢大师赐教。都给你吧
    你还有实现dir命令的程序吗?
      

  3.   

    dir 命令功能复杂,不是一下子就能做好的
      

  4.   

    不要求做的很像 windows 的 dir 的话可以简单地做一个
      

  5.   

    利用 java.io 包,完成 DOS 下命令的功能。
        支持下列命令选项:
            /A     显示具有指定属性的文件。
           attributes   
                  D  目录                R  只读文件
                  H  隐藏文件            A  准备存档的文件
                  S  系统文件            -  表示“否”的前缀
            /C    在文件大小中显示千位数分隔符。
            /P    在每个信息屏幕后暂停。
            /W    用宽列表格式。
     
    具体的输出方式参照 DIR 命令即可。