1

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

这是显示结构的链接: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;
}

关于该功能的建议会很棒。此外,关于如何浏览服务器上的文件系统或更简单的方法来创建树视图结构的替代方法也很好。谢谢!

4

2 回答 2

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); 
        }           
    }   

}

您可以使用其他方式来跟踪级别并将 ('*') 替换为所需的空格或 '\t'。

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

您的示例的输出:


*admin
**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
*guest
**C:\Root\guest\subguest1.txt
**subguest2
*user
**C:\Root\user\超级用户
1.txt ** 超级用户2

于 2014-08-11T19:45:13.150 回答
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; 
}
于 2014-08-11T20:36:09.650 回答