今天在用extjs tree的时候发神经,想用java打印出文件加的树状结构,结果和在命令行敲tree要一样。
自己做第一遍的结果像下面这样:
test
├1
│├1.txt
│├11
││├111.txt
││└112.txt
│└12
比如结点1没有兄弟了,则它的所有的孩子的左边的那条线就不该出现。
想了好久, 没有好的结果, 在网上找了一个, 发现消化起来不简单,可能我比较笨。
今天把问题拿出来, 感兴趣的来试试。贴代码有注释能让人很快看懂的有奖。
我的版本贴在
http://blog.csdn.net/sunxing007/archive/2008/11/26/3383182.aspx

解决方案 »

  1.   

    把listFiles(); 的结果处理成2个File数组就可以了
      

  2.   

    这是我刚才写的 不知是否合你口味?
    import java.io.*;
       
        public class TestTree {
            public static void main(String[] args) {
               File f = new File(args[0]); //输入路径
               System.out.println(f.getName());
               Tree(f,1); 
          }
       
        private static void Tree (File f,int level) { 
           File[] next = f.listFiles();
           String sign = "└ ";
           for(int i=0; i < level ;i++) {
                   sign = " " + sign;
           } 
           for(int i=0; i< next.length ; i++) {
                System.out.println(sign + next[i].getName());  
                if(next[i].isDirectory()){
                     Tree(next[i],level + 1);
              }  
           }
         }
        }
      

  3.   

    你的结果是:
    test
     └ 1
      └ 1.txt
      └ 11
       └ 111.txt
       └ 112.txt
      └ 12
     └ test.pdf
    肯定不合要求了,你在cmd下面输入命令tree看看。
    结果我已经有了, 我只想看看有没有更好的程序或解释
      

  4.   


    import java.io.File;
    public class ShowFile {    public static void main(String[] args) {
            File f=new File("G://JAVA//File类常用方法//创建文件名//A");
            tree(f);    }    
        private static void tree(File f){
            File[] childs=f.listFiles();
            for(int i=0;i<childs.length;i++){
                System.out.println(childs[i]);
                if(childs[i].isDirectory()){
                    tree(childs[i]);
                }
            }
        }
    }
      

  5.   

    自己建立文件试试下面的程序,我机子上能行。
    import java.io.File;
    import java.util.ArrayList;
    import java.util.List;public class PrintFileTree {
    public static void main(String args[])
    {
    List<Infor> list=new ArrayList<Infor>();
    list=show("E:\\我的作品\\lianxi\\lianxi\\src\\file",0);
    for(Infor inf:list)
    {
    for(int i=0;i<inf.jibie;i++)
    System.out.print(" ");
    System.out.print(inf.fileName);
    System.out.println();
    }
    }
    public static List<Infor> show(String file,int i)
    {
    List<Infor> list=new ArrayList<Infor>();
    File myFile=new File(file);
    if(myFile.isDirectory())
    {
    list.add(new Infor(myFile.getName(),i));
    File[] fileCollection=myFile.listFiles();
    for(File f:fileCollection)
    {
    list.addAll(show(f.getAbsolutePath(),i+1));
    }
    }
    else
    {
    list.add(new Infor(myFile.getName(),i));
    }
    return list;
    }}
    class Infor{
    String fileName;
    int jibie;
    public Infor(String fileName,int i)
    {
    this.fileName=fileName;
    jibie=i;
    }
    }
      

  6.   

    建议,如果没有了子类,你可以在传数据给EXT之前,把你的数据源做删除