我正在尝试创建一个遍历指定扩展名的目录和子目录的程序。这是我到目前为止的代码。我正在尝试使用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());
}
}
}
答案 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用于此目的。