1. 程式人生 > >jdk 1.7系列(三)處理目錄和目錄樹

jdk 1.7系列(三)處理目錄和目錄樹

需要 err visitor XML 只需要 重寫 img ide col

DirectoryStream<T> 接口

java.nio.file.DirectoryStream<T>接口和它的實現類提供的功能:

  1. 循環遍歷目錄中的子項,比如查找目錄中的文件
  2. 用glob表達式(比如*Footbar*)進行目錄子項匹配和基於MIME的內容檢測(比如text/xml文件)
  3. 用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系列(三)處理目錄和目錄樹