这是NIO类提供的遍历指定目录下的所有文件和子目录的方法。
是使用FIles的walkFileTree方法,其中有一个起始路径,还有一个FileVisitor这个访问器。一旦遍历文件,都会自动触发这个访问器中的方法。其中有四个方法
FileVisitResult preVisitDirectory(T var1, BasicFileAttributes var2) throws IOException;
FileVisitResult visitFile(T var1, BasicFileAttributes var2) throws IOException;
FileVisitResult visitFileFailed(T var1, IOException var2) throws IOException;
FileVisitResult postVisitDirectory(T var1, IOException var2) throws IOException;
}
实际使用中,使用
public class SimpleFileVisitor<T> implements FileVisitor<T> {
protected SimpleFileVisitor() {
}
public FileVisitResult preVisitDirectory(T dir, BasicFileAttributes attrs) throws IOException {
Objects.requireNonNull(dir);
Objects.requireNonNull(attrs);
return FileVisitResult.CONTINUE;
}
public FileVisitResult visitFile(T file, BasicFileAttributes attrs) throws IOException {
Objects.requireNonNull(file);
Objects.requireNonNull(attrs);
return FileVisitResult.CONTINUE;
}
public FileVisitResult visitFileFailed(T file, IOException exc) throws IOException {
Objects.requireNonNull(file);
throw exc;
}
public FileVisitResult postVisitDirectory(T dir, IOException exc) throws IOException {
Objects.requireNonNull(dir);
if (exc != null) {
throw exc;
} else {
return FileVisitResult.CONTINUE;
}
}
}
这个类,然后选择需要重写的方法即可。
例如
public static void main(String[] args) throws IOException {
Path path = Files.walkFileTree(Paths.get("G:", "wht", "ideaPro"),
new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
Objects.requireNonNull(file);
Objects.requireNonNull(attrs);
System.out.println("正在访问:"+file+"文件");
if(file.endsWith("FileVistorTest.java")){
System.out.println("----找到文件------");
return FileVisitResult.TERMINATE;
}
return FileVisitResult.CONTINUE;
}
public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {
Objects.requireNonNull(dir);
Objects.requireNonNull(attrs);
System.out.println("正在访问:"+dir+"路径");
return FileVisitResult.CONTINUE;
}
});
}