java根据文件路径遍历文件_Java使用FileVisitor 遍历文件和目录

在以前的Java 版本中,如果程序要遍历指定目录下的所有文件和子目录,则只能使用递归进行遍

历,但这种方式不仅复杂,而且灵活性也不高。有了Files工具类的帮助,现在可以用更优雅的方式来遍历文件和子目录。Files 类提供了如下两个方法来遍历文件和子目录。

98dc4a4cd7ac39438eb9417825b48bdc.png walkFileTree(Path start, FileVisitor super Path> visitor):遍历start路径下的所有文件和子目录。

9382f2194fe4db79cf0b90aeea819092.png walkFileTree(Path start, Setoptions, int maxDepth,FileVisitor super Path>visitor):与上一个方法的功能类似。该方法最多遍历maxDepth深度的文件。

上面两个方法都需要FileVisitor 参数,FileVisitor 代表一个文件访问器,walkFileTree()方法会 自动遍历start 路径下的所有文件和子目录,遍历文件和子目录都会“触发”FileVisitor 中相应的方法。

FileVisitor中定义了如下4个方法。

➢FileVisitResult postVisitDirectory(T dir, IOException exc);访问子目录之后触发该方法。

➢FileVisitResult preVisitDirectory(T dir, BasicFileAttributes attrs):访问子目录之前触发该方法。

➢FileVisitResult visitFile(T file, BasicFilettributes attrs);访问file 文件时触发该方法。

➢FileVisitResult visitFileFailed(T file, lOException exc):访问file文件失败时发该方法。

上面4个方法都返回一个FileVisitResult 对象,它是一个枚举类,代表了访问之后的后续为。

FileVisitResult定义了如下几种后续行为。

➢CONTINUE:代表“继续访问”的后续行为。

➢SKIP_SIBLINGS: 代表“继续访问”的后续行为,但不访问该文件或目录的兄弟文件或目录。

➢SKIP_SUBTREE:代表“继续访问”的后续行为,但不访问该文件或目录的子目录树。

➢TERMINATE: 代表“中止访问”的后续行为。

实际编程时没必要为FileVisitor 的4个方法都提供实现,可以通过继承SimpleFileVisitor( FileVisitor的实现类)来实现自己的“文件访问器”,这样就根据需要、选择性地重写指定方法了。

如下程序示范了使用FileVisitor 来遍历文件和子目录。

importjava.io.IOException;

importjava.nio.file.*;

importjava.nio.file.attribute.BasicFileAttributes;

publicclasstest{

publicstaticvoidmain(String[]args)throwsException{

//遍历g: \publishlcodes\15目录下的所有文件和子目录

Files.walkFileTree(Paths.get("g:","publish","codes","15"),

newSimpleFileVisitor(){//访问文件时触发该方法

@Override

publicFileVisitResultvisitFile(Pathfile

,BasicFileAttributesattrs)throwsIOException{

System.out.println("正在访问"+file+"文件");

//找到了FileVisitorTest.java文件

if(file.endsWith("FilevisitorTest. java")){

System.out.println("--已经找到目标文件--");

returnFileVisitResult.TERMINATE;

}

returnFileVisitResult.CONTINUE;

}

//开始访问目录时触发该方法

@Override

publicFileVisitResultpreVisitDirectory(Pathdir

,BasicFileAttributesattrs)throwsIOException{

System.out.println("正在访问:”+ dir+”路径");

returnFileVisitResult.CONTINUE;

}

});

}

}

上面程序中使用了Files工具类的walkFileTree()方法来遍历g:publish\codes\15目录下的所有文件和子目录,如果找到的文件以“FileVisitorTestjava”结尾,则程序停止遍历一这 就实现了对指定目录进行搜索,直到找到指定文件为止。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值