FileVistror类的用法

这是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;
                    }
                });

    }

  

原文地址:https://www.cnblogs.com/tomato190/p/12668676.html