用于为Angular.Treeview创建Treeview的递归函数

时间:2014-08-11 18:57:42

标签: java javascript angularjs treeview apache-commons-io

我正在尝试提出一个递归函数,我可以用它创建角树视图使用的树视图结构。

以下是显示结构的链接:https://github.com/eu81273/angular.treeview

我正在尝试基于服务器上的文件目录创建树视图,并希望使用JSON从Java代码传回它。我正在努力创建将遍历目录并使用子项创建必要结构的函数。

我创建了一个POJO类来反映树视图结构服务器端。我试图使用以下函数作为这个函数的基础:

private static void listFiles(File rootDir, String[] files){
    for (String fileName: files){
        File fileOrDir = new File(rootDir, fileName); 
        if (fileOrDir.isDirectory()){
            listFiles(fileOrDir, fileOrDir.list());
        } else {
            System.out.println(fileOrDir); 
        }
    }
}

这是对象的样子片段:

public class AngularTreeview {
private String label; 
private String id; 
private Collection<AngularTreeview> children;
}

关于这个功能的建议很棒。另外,如何在服务器上浏览文件系统或更简单的方法来创建树视图结构也是很好的选择。谢谢!

2 个答案:

答案 0 :(得分:0)

public static int level = 0;

private static void listFiles(File rootDir, String[] files){

    String name = rootDir.toString();       
    System.out.println(name.substring(name.lastIndexOf('\\') + 1));

    for (String fileName: files){
        File fileOrDir = new File(rootDir, fileName); 
        if (fileOrDir.isDirectory()){   

            level += 1;
            for(int i = 0; i < level; ++i)
                System.out.print('*');          

            listFiles(fileOrDir, fileOrDir.list());
            level -= 1;         
        } else {            
            for(int i = 0; i <= level; ++i)
                System.out.print('*');
            System.out.println(fileOrDir); 
        }           
    }   

}

您可以使用其他方式跟踪关卡并替换(&#39; *&#39;)所需的空格或&#39; \ t&#39;。

    File root = new File("C:\\Root");
    String[] files = root.list();
    listFiles(root, files);

输出示例:


*管理
** C:\ ROOT \ ADMIN \ subAdmin1.txt
** subAdmin2
*** subAdmin2-1
**** C:\ ROOT \ ADMIN \ subAdmin2 \ subAdmin2-1 \ subAdmin2-1-1.txt
**** C:\ ROOT \ ADMIN \ subAdmin2 \ subAdmin2-1 \ subAdmin2-1-2.txt
*游客
** C:\ ROOT \客\ subguest1.txt
** subguest2
*用户
** C:\根\用户\ superuser1.txt
** superUser2

答案 1 :(得分:0)

这就是我最终的目标,我仍在使用角度树视图的结果,但我会在它工作时发布。

public AngularTreeview getDirectoryTreeview(){
    File node = new File("C:\\[yourlocation]");     
    String[] subNote = node.list();

    AngularTreeview treeview = new AngularTreeview(node.getName());
    treeview.setChildren(setChildrenFunction(node, subNote));

    return treeview; 
}

public Collection<AngularTreeview> setChildrenFunction(File rootDir, String[] subfiles) {
    Collection<AngularTreeview> treecol = new ArrayList<AngularTreeview>(); 

    for (String fileName : subfiles){

        AngularTreeview child = new AngularTreeview(fileName);
        File fileOrDir = new File(rootDir, fileName); 
        if (fileOrDir.isDirectory()){
            child.setChildren(setChildrenFunction(fileOrDir, fileOrDir.list()));
        }

        treecol.add(child); 
    } 
    return treecol; 
}