File 获取特定文件夹路径

File 获取特定文件夹路径,file,recursion,directory,File,Recursion,Directory,在一组随机嵌套的文件夹和文件中,我需要获取所有文件夹路径,其中特定子文件夹的名称为“x” 例如,在以下结构中,我需要程序仅返回a\c\e\x: 请注意,可以有任何级别的嵌套和任何文件夹结构 更新: 我已经能够写一个基本的程序来实现我想要的。但是,在我前面的图中,当“dir d”下有一个目录“dir x”时,它会失败。因此程序返回\c\e\x和d\x。你能帮我修好吗 公共类僵尸{ String folderName= new String(); ArrayList folderList= new

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

例如,在以下结构中,我需要程序仅返回
a\c\e\x

请注意,可以有任何级别的嵌套和任何文件夹结构

更新: 我已经能够写一个基本的程序来实现我想要的。但是,在我前面的图中,当“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;
}
String folderName=new String();
ArrayList folderList=新建ArrayList();
公共静态void main(字符串[]args){
字符串路径;
试一试{
path=新的java.io.File(“.”.getCanonicalPath();
僵尸僵尸=新僵尸();
GetFilePath(新文件(path).listFiles(),僵尸);
迭代器itr=zombie.folderList.Iterator();
while(itr.hasNext())
System.out.println(itr.next());
}捕获(IOE异常){
e、 printStackTrace();
}
}
公共静态void getfilepath(文件[]文件列表,僵尸){
对于(int i=0;i
  • 以种子文件夹为例,将其名称附加到类型为string的folder_list变量中
  • 如果种子文件夹为x及其子节点,则将文件夹列表添加到全局文件夹数组
  • 遍历种子文件夹的所有文件夹。在传递文件夹\u列表的同时,将每个子文件夹作为种子文件夹传递,从1开始重复

  • PS:这就差不多了。

    这主要取决于用于保存文件和文件夹的数据结构,这里使用的数据结构是什么?