在之前的Java版本中,若是要遍歷某個文件夾下全部的子文件、子文件夾,須要咱們本身寫遞歸,很麻煩。ide
在Java7之後,咱們能夠NIO.2中的Files工具類來遍歷某個文件夾(會自動遞歸)。工具
大體用法:post
1 Path path=Paths.get("D:\\二次元"); 2 3 Files.walkFileTree(path,new FileVisitor<Path>(){ 4 5 //訪問文件夾以前自動調用此方法 6 @Override 7 public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException { 8 return null; 9 } 10 11 //訪問文件時自動調用此方法 12 @Override 13 public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { 14 return null; 15 } 16 17 //訪問文件失敗時自動調用此方法 18 @Override 19 public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException { 20 return null; 21 } 22 23 //訪問文件夾以後自動調用此方法 24 @Override 25 public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException { 26 return null; 27 } 28 });
Files.walkFileTree(Path path, FileVisitor visitor); spa
靜態方法。第一個參數指定要遍歷的文件夾,第二個參數是FileVisitor對象,指定遍歷時如何處理文件、文件夾。指針
FileVisitor是一個接口,須要實現4個方法。固然咱們可使用適配器 SimpleFileVisitor 類,只重寫咱們須要的方法。code
4個方法的返回值類型均是FileVisitResult,FileVisitReset是一個枚舉類。表明訪問此文件/文件夾後的後續行爲。可以使用的值:對象
須要以 FileVisitResult. 的形式引用,示例:FileVisitResult.CONTINUE blog
示例:輸出每一個文件、文件夾的名稱。遞歸
1 Path path=Paths.get("D:\\二次元"); 2 3 Files.walkFileTree(path,new FileVisitor<Path>(){ 4 5 //訪問文件夾以前自動調用此方法 6 @Override 7 public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException { 8 System.out.println(dir.getFileName()); 9 return FileVisitResult.CONTINUE; 10 } 11 12 //訪問文件時自動調用此方法 13 @Override 14 public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { 15 System.out.println(file.getFileName()); 16 return FileVisitResult.CONTINUE; 17 } 18 19 //訪問文件失敗時自動調用此方法 20 @Override 21 public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException { 22 return FileVisitResult.CONTINUE; 23 } 24 25 //訪問文件夾以後自動調用此方法 26 @Override 27 public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException { 28 return FileVisitResult.CONTINUE; 29 } 30 });
做爲根的文件夾(上例中的「二次元」)也算做一個遍歷的節點。接口
PreVisitDirectory()、PostVisitDirectory()、VisitFile()這3個方法,不能返回null,若是返回null,編譯時ok,但運行時每每會報錯——空指針異常。IDEA下的代碼自動完成,4個方法的默認實現都是return null,須要注意。
Java的工具類的命名通常是在對應類後面加一個s。好比:
Collection Collections
Array Arrays
File Files
FileSystem FileSystems