【问题标题】:Recursive Function to create Treeview for Angular.Treeview为 Angular.Treeview 创建 Treeview 的递归函数
【发布时间】:2014-08-11 18:57:42
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案1】:
    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);
    

    你的例子的输出:


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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-21
        • 1970-01-01
        • 2021-04-18
        相关资源
        最近更新 更多