2013-02-17 68 views
0

我试图做一个程序,遍历一个目录和子目录与指定的扩展名。这里是代码我有迄今为止。我试图使用endsWith方法,但因为我传递参数递归调用的文件类型,我不能使用增强For循环中的字符串。目录遍历在java中的扩展

import java.io.File; 

公共类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

什么问题?你没有通过或测试任何扩展名。 – 2013-02-17 08:55:56

+0

还有另一个listFiles方法,您可以在其中传递扩展过滤器作为参数:http://docs.oracle.com/javase/1.4.2/docs/api/java/io/File.html#listFiles(java.io。 FileFilter) – vadchen 2013-02-17 08:58:29

+0

是的,我没有通过任何Extension.I想要一个代码遍历目录扩展名(txt,zip,png等),但我不知道如何这样做。 – Harjot 2013-02-17 09:01:24

回答

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方法中做一些事情。

0

如果您使用的是Java 6或更早的版本,则可以使用apache commons FileUtils或DirectoryWalker来达到此目的。