使用FileVisitor遍历文件和目录

    xiaoxiao2021-04-13  298

    在以前的JAVA版本中,如果程序要遍历指定目录下的所有文件和目录,必须使用递归来实现。在新版本中有了Files工具类的帮助就可以很容易的实现目录的遍历。Files提供如下两个方法来遍历文件和子目录。

    walkFileTree(Path start, File Visitor<? super Path> visitor)wakkFileTree(Path start, Set<FileVisitOption> options, int maxDepth, FileVisitor<? super Path> visitor):与上个方法相比,该方法最多遍历maxDepth层。

            这个方法需要一个Path和一个FileVisitor参数。其中Path是要遍历的路径,而FileVisitor则可以看成的一个文件访问器,它主要提供的四个方法,如下所示。

    FileVisitResult postVisitDirectiory(T dir, IOException exc):访问目录之后触发该方法 FileVisitResult preVisitDirectiory(T dir, BasicFileAttributes attrs):访问子目录之前触发该方法 FileVisitResult visitFile(T dir,BasicFileAttributes attrs):访问file文件时触发该方法 FileVisitResult visitFileFailed(T dir, IOException exc):访问file文件失败时触发该方法。

    这四个方法返回的都是FileVisitResult对象,它是一个枚举类,代表的是返回之后的一些后续的操作。  FileVisitResult主要包含四个常见的操作。

    FileVisitResult.CONTINUE 继续遍历FileVisitResult.TERMINATE 中止访问FileVisitResult.SKIP_SIBLINGS 不访问同级的文件或目录FileVisitResult.SKIP_SUBTREE 不访问子目录 在实际编程时,没必要为FileVisitor的4个方法都实现,可以通过继承SimpleFileVisitor(FileVisitor的实现类)来实现自己的“文件访问器”,这样就根据需要、选择性地重写指定方法。 示例如下: import java.io.*; import java.nio.file.*; import java.nio.file.attribute.*; public class FileVisitorTest { public static void main(String[] args) throws Exception { // 遍历C:\Users\Administrator\Desktop\CASC申请 Files.walkFileTree(Paths.get("c:", "Users" , "Administrator" , "Desktop", "CASC申请") , new SimpleFileVisitor<Path>() { // 访问文件时候触发该方法 @Override public FileVisitResult visitFile(Path file , BasicFileAttributes attrs) throws IOException { System.out.println("正在访问" + file + "文件"); // 找到了FileInputStreamTest.java文件 if (file.endsWith("附件1.“CASC奖学金”申请表.doc")) { System.out.println("--已经找到目标文件--"); return FileVisitResult.TERMINATE; } return FileVisitResult.CONTINUE; } // 开始访问目录时触发该方法 @Override public FileVisitResult preVisitDirectory(Path dir , BasicFileAttributes attrs) throws IOException { System.out.println("正在访问:" + dir + " 路径"); return FileVisitResult.CONTINUE; } }); } } 结果如下: 上面程序遍历遍历C:\Users\Administrator\Desktop\CASC申请 目录下所有文件和子目录,如果找到的文件已“附件1.“CASC奖学金”申请表.doc”结尾,则停止遍历。

    转载请注明原文地址: https://ju.6miu.com/read-668807.html

    最新回复(0)