Java中使用Files类遍历文件夹

Files类属于java.nio.file包,是Java7新增的文件操作工具类。

使用Files类提供的walkFileTree(Path start, FileVisitor visitor)方法,能够遍历指定目录下的所有文件和文件夹。

 

walkFileTree方法需要FileVisitor类型的参数,FileVisitor是一个接口,遍历文件和目录时会触发定义在FileVisitor中的方法。

方法如下:

  • FileVisitResult preVisitDirectory(T dir, BasicFileAttributes attrs)
  • 访问目录之前触发

 

  • FileVisitResult visitFile(T file, BasicFileAttributes attrs)
  • 访问文件时触发

 

  • FileVisitResult visitFileFailed(T file, IOException exc)
  • 访问文件错误时触发

 

  • FileVisitResult postVisitDirectory(T dir, IOException exc)
  • 访问目录之后触发

 

上面4个方法都返回FileVisitResult 对象,定义了4种访问后的行为。

  • CONTINUE 继续访问
  • TERMINATE 停止访问
  • SKIP_SUBTREE 继续访问,跳过当前目录的子目录树
  • SKIP_SIBLINGS 继续访问,跳过同级目录或者文件

 

遍历文件夹代码示例

Path path = Paths.get("d:", "MyWorkSpace", "IdeaProjects");
// 遍历D:\MyWorkSpace\IdeaProjects目录下的所有文件和子目录,寻找FileVisitorTest.java文件
Files.walkFileTree(path
		, new SimpleFileVisitor() {
			// 访问文件时触发
			@Override
			public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
				if (file.endsWith("FileVisitorTest.java")) {
					System.out.println("已经找到FileVisitorTest.java文件!停止查找!");
					return FileVisitResult.TERMINATE;
				}
				System.out.println("正在访问" + file + "文件");
				return FileVisitResult.CONTINUE;
			}

			// 访问目录时触发
			@Override
			public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {
				System.out.println("正在访问:" + dir + " 目录");
				return FileVisitResult.CONTINUE;
			}
		});

注:SimpleFileVisitor是FileVisitor的实现类,使用它我们无需重写FileVisitor中的全部方法。

你可能感兴趣的:(java)