java使用新的(nio)遍历文件(支持文件后缀名、文件名正则表达式匹配)

老子叫甜甜 提交于 2020-01-27 04:19:55
import org.junit.Test;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;

public class TestParseJson {
    @Test
    public void test() throws IOException {
        Path startingDir = Paths.get("f:\\temp");
        FindFileVisitor filterFilesVisitor= new FindFileVisitor(".wav","\\d+{13}");

        Files.walkFileTree(startingDir, filterFilesVisitor);

        List<Path> files = filterFilesVisitor.getFilenameList();
        System.out.println(files);
    }
}
import java.nio.file.FileVisitResult;
import java.nio.file.Path;
import java.nio.file.SimpleFileVisitor;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.LinkedList;
import java.util.List;

class FindFileVisitor extends SimpleFileVisitor<Path> {

    private List<Path> filenameList = new LinkedList<>();
    private String fileSuffix = null;
    private String pattern = null;

    public FindFileVisitor(String fileSuffix) {
        this.fileSuffix = fileSuffix;
    }

    public FindFileVisitor(String fileSuffix,String pattern)
    {
        this(fileSuffix);
        this.pattern = pattern;
    }

    public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) {

        String absPath = file.toString();

        Path fileName = file.getFileName();

        if (absPath.endsWith(fileSuffix)) {

            if(pattern != null)
            {                //正则表达式+文件后缀名匹配整个文件名                //例如pattern \\d{13}  后缀.wav组成新的表达式  "\\d{13}\\.wav"
                if(!fileName.toString().matches(pattern + fileSuffix))
                {
                    return FileVisitResult.CONTINUE;
                }
            }
            filenameList.add(file.normalize());
        }
        return FileVisitResult.CONTINUE;
    }

    public List<Path> getFilenameList() {
        return filenameList;
    }
}

 

输出结果

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!