DirectoryStream<T> 接口
java.nio.file.DirectoryStream<T>接口和它的实现类提供的功能:
- 循环遍历目录中的子项,比如查找目录中的文件
- 用glob表达式(比如*Footbar*)进行目录子项匹配和基于MIME的内容检测(比如text/xml文件)
- 用walkFileTree方法实现递归移动、复制和删除操作
一、在目录中查找文件,列出目录下的xml文件
以此项目为示例:
package com.gudongcheng.jdk7.nio; import java.io.IOException; import java.nio.file.DirectoryStream; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; /** * @author lizuoyang * @date 2018/10/30 * @desc 使用DirectoryStream接口在目录中查找文件 */ public class DirectoryStreamDemo { public static void main(String[] args) { //设定起始路径 Path dir = Paths.get("E:\\ideaProjects\\Demo"); //使用try-with-resource语法声明过滤流 过滤dir文件夹中所有的.java文件 try (DirectoryStream<Path> stream = Files.newDirectoryStream(dir, "*.xml")) { for (Path entry : stream) { System.out.println(entry.getFileName()); } } catch (IOException e) { System.err.println(e.getMessage()); } } }
二、遍历目录树,列出目录中所有java源码文件
package com.gudongcheng.jdk7.nio; import java.io.IOException; import java.nio.file.*; import java.nio.file.attribute.BasicFileAttributes; /** * @author lizuoyang * @date 2018/10/30 * @desc 使用Files.walkFileTree和SimpleFileVisitor<T>类 递归查找目录 */ public class WalkFileTreeDemo { public static void main(String[] args) throws IOException { //递归查询目录下以.xxx结尾的文件 Path startingDir = Paths.get("E:/ideaProjects/Demo"); Files.walkFileTree(startingDir,new FindJavaVisitor()); } private static class FindJavaVisitor extends SimpleFileVisitor<Path> { private static final String SUFFIX = ".java"; @Override public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { if (file.toString().endsWith(FindJavaVisitor.SUFFIX)) { System.out.println(file.getFileName()); } return FileVisitResult.CONTINUE; } } }
备注:整个过程从调用Files.walkFileTree方法开始,这里最关键的是FindJavaVisitor,该类扩展了SimpleFileVisitor,你想让SimpleFileVisitor来实现遍历目录,你唯一要做的就是重写visitFile ( Pathj,BasicFileAttributes) 方法,在这个方法中你也只需要写些代码判断文件名是否以.java结尾。其他用例包括递归移动、复制、删除或者修改文件。在大多数应用场景中,你只需要扩展SimpleFileVisitor,你也可以实现中级的FileVisitor,API也很灵活。
原文地址:https://www.cnblogs.com/gudongcheng/p/9880331.html
时间: 2024-10-09 22:15:57