1.Files.walkFileTree():
順序:順序訪問,碰到目錄會一直遞歸下去
package com.test; import java.io.File; import java.io.IOException; import java.nio.file.FileVisitResult; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.SimpleFileVisitor; import java.nio.file.attribute.BasicFileAttributes; import java.util.LinkedList; import java.util.List; public class FileFinder { public static void main(String[] args) throws IOException { Path startingDir = Paths.get("D:\\test"); List<String> result = new LinkedList<String>(); Files.walkFileTree(startingDir, new FilterFilesVisitor(result)); System.out.println("result.size()=" + result.size()); for (String name : result) { System.out.println(name); } } private static class FilterFilesVisitor extends SimpleFileVisitor<Path> { private List<String> result = new LinkedList<String>(); public FilterFilesVisitor(List<String> result) { this.result = result; } /** * 正在訪問一個文件時要干啥 */ @Override public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) { if (file.toString().endsWith(".java")) { result.add(file.toString()); System.out.println("文件名"+file.getFileName()); System.out.println("文件全路徑"+file.toString()); File f = file.toFile(); f.delete(); System.out.println(file.getFileName()+"已刪除"); } // SKIP_SIBLINGS:繼續遍歷,但忽略當前節點的所有兄弟節點直接返回上一層繼續遍歷 // SKIP_SUBTREE:繼續遍歷,但是忽略子目錄,但是子文件還是會訪問; // TERMINATE:終止遍歷 //繼續遍歷 return FileVisitResult.SKIP_SUBTREE; } /** * 訪問一個目錄前要干啥 */ @Override public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException { // TODO Auto-generated method stub return super.preVisitDirectory(dir, attrs); } /** * 訪問一個目錄后要干啥 */ @Override public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException { // TODO Auto-generated method stub return super.postVisitDirectory(dir, exc); } /** * 訪問一個文件失敗時要干啥 */ @Override public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException { // TODO Auto-generated method stub return super.visitFileFailed(file, exc); } } }