使用FileVisitor遍历文件和目录

在以前的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主要包含四个常见的操作。

  1. FileVisitResult.CONTINUE 继续遍历
  2. FileVisitResult.TERMINATE 中止访问
  3. FileVisitResult.SKIP_SIBLINGS 不访问同级的文件或目录
  4. 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”结尾,则停止遍历。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值