【问题标题】:Get list of all subfolders获取所有子文件夹的列表
【发布时间】:2015-05-16 09:04:47
【问题描述】:

我有一个程序逻辑问题,如何获取服务器上所有文件夹的列表:

可以说,我有一个如下的文件夹结构,我想获取其中所有文件夹的列表:

![在此处输入图片描述][1]

String rootDirectory = “Root”; 
CmdClient client = null; 
client.connect("demo.asperasoft.com", "asperaweb", "demoaspera", 22);

// This method gives list of files inside param folder CmdReplyFile cmdfiles=client.execLs(rootDirectory);

//this method gives a list of files 
File[] fileObjects = cmdfiles.getFileList();

//this method gives file count 
int fileCount= cmdfiles.getFileCount();

这里的文件类不是 Java 文件类。现在,当我尝试打印所有文件夹的列表时,它只是给了我:

阿尔法 贝塔 伽马

private void getFolderList(String rootDirectory) throws IOException, CmdClientException {
        CmdReplyFile cmdfiles=client.execLs(rootDirectory);
        File[] fileObjects = cmdfiles.getFileList();
        for (File fileObject : fileObjects) {
            if (fileObject.isDirectory()) {
                System.out.println(fileObject.getName());
                getFolderList(fileObject.getName());
            }
        }

请提出一个可能的逻辑。

【问题讨论】:

    标签: java algorithm recursion functional-programming logic


    【解决方案1】:

    感谢卡蒂克!我可以用你的解决方案做到这一点:

    public void getListOfFolders(String rootPath) throws IOException, CmdClientException {
        List<String> folders = new LinkedList<String>();
        folders.add(rootPath);
        getFolders(rootPath, folders);
    
        for (String items : folders){
            System.out.println("Folders: "+items.toString());
        }
    }
    
    public void getFolders(String directoryName, List<String> folders) throws IOException, CmdClientException {
        CmdReplyFile cmdfiles=client.execLs(directoryName);
        File[] fileObjects = cmdfiles.getFileList();
        String dirStructure=folders.get(folders.size()-1).toString();
        for (File file : fileObjects) {
            if (file.isDirectory()) {
                String folderPath=dirStructure+file.getName()+"/";
                folders.add(folderPath);
                getFolders(folderPath, folders);
            }
        }
    }
    

    【讨论】:

      【解决方案2】:

      我希望下面的代码能满足你的要求:

      public void getListOfFolders(String rootPath) {
          List<String> folders = new LinkedList<String>();
          getFolders(rootPath, folders);
          // Now folders got everything you need.
      }
      
      public void getFolders(String directoryName, List<String> folders) {
          File directory = new File(directoryName);
          File[] fList = directory.listFiles();
          for (File file : fList) {
              if (file.isDirectory()) {
                  folders.add(file.getAbsolutePath());
                  getFolders(file.getAbsolutePath(), folders);
              }
          }
      }
      

      【讨论】:

      • 感谢 Kartic 的回复!虽然正如我提到的“文件”类不是 Java IO 文件,但它是一个没有 getAbsolutePath 方法的自定义 sdk。我正在添加 api 的快照。
      • 对不起,我没有注意到。但是你的逻辑是对的吗?
      猜你喜欢
      • 1970-01-01
      • 2013-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-27
      • 1970-01-01
      • 2021-02-26
      相关资源
      最近更新 更多