jdk 1.7系列(三)處理目錄和目錄樹
阿新 • • 發佈:2018-10-31
需要 err visitor XML 只需要 重寫 img ide col
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也很靈活。
jdk 1.7系列(三)處理目錄和目錄樹