0

指定された拡張子を持つディレクトリとサブディレクトリをトラバースするプログラムを作成しようとしています.これまでのコードは次のとおりです.endWithメソッドを使用しようとしていますが、再帰呼び出しのためにファイルタイプのパラメータを渡すため、使用できません強化された For ループ内の文字列。

import java.io.File;

public class Traverse_Recursively {

/**
 * @param args
 */
public static void main(String[] args) {
    File inputFolder = new File("c:/inputFolder");
    traverse(inputFolder, "");
}

public static void traverse(File parentNode, String leftIndent) {
    if (parentNode.isDirectory()) {
        System.out.println(leftIndent + parentNode.getName());

        leftIndent += "     ";

        File childNodes[] = parentNode.listFiles();
        for (File childNode : childNodes) {
            traverse(childNode, leftIndent);
        }
    } else {

        System.out.println(leftIndent +"|   --> "+ parentNode.getName());

    }
}

}

4

2 に答える 2

1

Java 7 Files.walkFileTree メソッドを使用できます。これにより、作業がはるかに簡単になると思います。

    Path path = Paths.get(<your root directory>);
    Files.walkFileTree(path, new FileVisitor<Path>() {
        @Override
        public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {
            return FileVisitResult.CONTINUE;
        }

        @Override
        public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
            System.out.println("visitFile: " + file.getFileName());
            return FileVisitResult.CONTINUE;
        }

        @Override
        public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException {
            return FileVisitResult.CONTINUE;
        }

        @Override
        public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
            System.out.println("postVisitDirectory: " + dir.getFileName());
            return FileVisitResult.CONTINUE;
        }
    });

ファイルのみに関心がある場合は、visitFile メソッドで何かを行うだけで済みます。

于 2013-02-17T09:24:51.287 に答える
0

Java 6 以前を使用している場合は、そのような目的で apache commons FileUtils または DirectoryWalker を使用できます。

于 2013-02-17T10:37:18.957 に答える