在java中使用扩展的目录遍历

时间:2013-02-17 08:48:02

标签: java directory traversal

我正在尝试创建一个遍历指定扩展名的目录和子目录的程序。这是我到目前为止的代码。我正在尝试使用endsWith方法但因为我传递了文件类型的参数用于递归调用,我不能在增强的For循环中使用String。

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());

    }
}

}

2 个答案:

答案 0 :(得分: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方法中执行某些操作。

答案 1 :(得分:0)

如果您使用的是java 6或更早版本,则可以将apache commons FileUtils或DirectoryWalker用于此目的。