0

ネストされたフォルダーとファイルのランダムなセットで、特定の子フォルダーの名前が「x」であるすべてのフォルダー パスを取得する必要があります。

たとえば、次の構造では、戻るだけのプログラムが必要ですa\c\e\x

ここに画像の説明を入力

任意のレベルのネストと任意のフォルダ構造が存在する可能性があることを確認してください。

更新: 私が望んでいたことを達成するための基本的なプログラムを書くことができました。ただし、前の図で「dir d」の下に「dir x」というディレクトリがあると失敗します。したがって、プログラムは a\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;
}

}

4

1 に答える 1

0
  1. シード フォルダーを取得し、その名前を文字列型の folder_list 変数に追加します。
  2. シード フォルダが x で、その子ノードが folder_list をグローバル folder_array に追加する場合。
  3. シード フォルダのすべてのフォルダをトラバースします。folder_list を渡し、すべての子フォルダーをシード フォルダーとして渡しながら、1 から繰り返します。

PS:これで十分です。

于 2012-05-18T12:04:42.940 に答える