2013-02-17 67 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來達到此目的。