Java 文件树
Java ⽂件树
Java IO教程 - Java⽂件树
FileVisitor API可以递归地处理⽂件树中的所有⽂件和⽬录。
当我们要对⽂件树中的所有或某些⽂件或⽬录执⾏某些操作时 FileVisitor API⾮常有
⽤。
SimpleFileVisitor类是FileVisitor接⼜的基本实现。
当访问⽂件/ ⽬录时 SimpleFileVisitor类不执⾏任何操作。我们可以从
SimpleFileVisitor类继承我们的⽂件访问类 并且只覆盖适合我们需要的⽅法。
FileVisitor接⼜的⽅法:
ID 含义
1 FileVisitResult preVisitDirectory (T dir BasicFileAttributes attrs ) 在访问⽬录中的
条⽬之前调⽤⼀次。
FileVisitResult postVisitDirectory (T dir IOE ception e c ) 已访问⽬录中的后调
2 ⽤项。如果在⽬录的迭代期间抛出了任何异常 则将异常对象作为第⼆个参数传
递给此⽅法。如果此⽅法的第⼆个参数为null 则在⽬录迭代期间没有异常。
3 FileVisitResult visitFile (T⽂件 BasicFileAttributes attrs ) 当访问⽬录中的⽂件时
调⽤。
4 FileVisitResult visitFileFailed (T⽂件 IOE ception e c ) 当由于任何原因⽽⽆法
访问⽂件或⽬录时调⽤。
下表列出了FileVisitResult的枚举常量及其说明
枚举常量 描述
CONTINUE 继续处理
SKIP_SIBLINGS 继续处理⽽不访问⽂件或⽬录的兄弟节点。
SKIP_SUBTREE 继续处理 ⽽不访问⽬录中的条⽬。
TERMINATE 终⽌⽂件访问过程。
我们不需要在我们的⽂件访问类的所有四个⽅法中编写逻辑。要复制⽬录 请使⽤
preVisitDirectory()⽅法来创建⼀个新⽬录和visitFile()⽅法来复制⽂件。
以下代码显⽰如何打印⽬录的⼦⽬录和⽂件的名称。
import static java.nio.file.FileVisitResult.CONTINUE;
import java.io.IOException;
import java.nio.file.FileVisitResult;
import java.nio.file.FileVisitor;
import java.nio.file.Files;
import java.nio.file.Pat ;
import java.nio.file.Pat s;
import java.nio.file.SimpleFileVisitor;
import java.nio.file.attribute.BasicFileAttributes;
public class Main {
public static void main(String[] args) {
Pat startDir = Pat s.get("");
FileVisitor visitor = getFileVisitor();
try {
Files.walkFileTree(startDir, visitor);
} catc (IOException e) {
e.printStackTrace();
}
}
public static FileVisitor getFileVisitor() {
class DirVisitor extends SimpleFileVisitor {
@Override
public FileVisitResult preVisitDirectory(Pat dir,
BasicFileAttributes attrs) {
System.out.format("%s [Directory]%n", dir);
r