2016-05-27 39 views

回答

2

另一種方式來擴展這個你自己的邏輯:

public static void printFileNamesRecursively(String path){ 
    Path yourPath = FileSystems.getDefault().getPath(path); 

    try (DirectoryStream<Path> directoryStream = Files.newDirectoryStream(yourPath))   { 
      for (Path p : directoryStream) { 
       System.out.println(p.getFileName()); 
       if(p.toFile().isDirectory()){ 

        printFileNamesRecursively(p.toString()); 
       } 

      } 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
} 
1

這是DirectoryStream正確的行爲。相反,您可以使用org.apache.commons.io.FileUtils以遞歸方式枚舉文件。

3

Files::newDirectoryStream的行爲就是這樣。如果要遞歸地檢索給定目錄及其子目錄中的所有目錄和文件,則需要Files::walkFiles::walkFileTree。例如(我假設你使用Java 8):

Path path = //... 
try { 
    Files.walk(path).map(Path::getFileName).forEach(System.out::println); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 
+0

所以我想@Rambler的回答將是在java 7中的「如何做到」? – Tiina

+1

@Tiina當然。但要注意,如果你的目錄非常非常深,或者包含一個循環(通過符號/硬鏈接),你將會得到一個StackOverFlowExcepetion。如果您的軟件可能與未知目錄一起工作,您可能需要修改它的工作方式。 – glee8e