2012-05-17 62 views
0

在随机设置的嵌套文件夹和文件中,我需要获取所有文件夹路径,其中特定子文件夹的名称是“x”。获取特定文件夹路径

例如,在下面的结构,我需要的程序只返回a\c\e\x回:

enter image description here

请参阅可以有嵌套任何级别的任何文件夹结构。

UPDATE: 我已经能够编写一个基本的程序来实现我想要的。但是,在我之前的图中,在'dir d'下有一个目录'dir x'时失败。所以程序返回一个\ c \ e \ x和d \ x。你能帮助解决这个问题吗?

公共类僵尸{

String folderName= new String(); 
ArrayList folderList= new ArrayList(); 

public static void main(String[] args) { 
    String path; 
    try { 
     path = new java.io.File(".").getCanonicalPath(); 
     Zombie zombie= new Zombie(); 
     getFilePaths(new File(path).listFiles(), zombie); 


     Iterator itr = zombie.folderList.iterator(); 
     while (itr.hasNext()) 
      System.out.println(itr.next()); 

    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

public static void getFilePaths(File[] fileList, Zombie zombie) { 
    for (int i=0; i<fileList.length; i++) { 
     File file= fileList[i]; 
     if (file.isDirectory()) { 
      if (containsDesiredFolder(file)) { 
       zombie.folderList.add(zombie.folderName+ "\\" + file.getName()); 
       zombie.folderName=""; 
      } else { 
       if (containsFoldersNotFiles(file)) { 
        zombie.folderName= zombie.folderName + "\\" + file.getName(); 
        getFilePaths(file.listFiles(), zombie); 
       } 
      } 
     } 
    } 
} 

public static boolean containsFoldersNotFiles(File file) { 
    boolean flag = false; 
    if (file.isFile()) return false; 

    File[] dummyList = file.listFiles(); 

    //no file or folder present 
    if (dummyList == null) 
     return flag; 

    for (int i = 0; i < dummyList.length; i++) { 
     File dummyFile = dummyList[i]; 
     if (dummyFile.isDirectory()) { 
      return true; 
     } 
    } 
    return flag; 
} 

public static boolean containsDesiredFolder(File file) { 
    boolean flag = false; 
    if (file.isFile()) return false; 
    File[] dummyList = file.listFiles(); 

    if (dummyList == null) 
     return flag; 

    for (int i = 0; i < dummyList.length; i++) { 
     File dummyFile = dummyList[i]; 
     if (dummyFile.isDirectory() && dummyFile.getName().equals("dirx")) { 
      flag = true; 
     } 
    } 
    return flag; 
} 

}

+0

主要依赖于用于容纳文件和文件夹的数据结构,这里使用的数据结构是什么? –

回答

0
  1. 取种子的文件夹,在字符串类型folder_list变量附加其名称。
  2. 如果种子文件夹是x及其子节点将folder_list添加到全局folder_array。
  3. 遍历种子文件夹的所有文件夹。同时传递folder_list,并传递每个子文件夹作为种子文件夹从1开始重复。

PS:这几乎可以做到。

相关问题