美文网首页
java遍历文件目录

java遍历文件目录

作者: cherishpf | 来源:发表于2020-06-09 17:53 被阅读0次

下面是一个Java程序,使用了Glob模式来搜索指定的目录及其子目录,返回符合匹配条件的文件绝对路径列表:

package cn.cloud.worker.utils;

import java.io.IOException;
import java.nio.file.FileSystems;
import java.nio.file.FileVisitResult;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.PathMatcher;
import java.nio.file.Paths;
import java.nio.file.SimpleFileVisitor;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.ArrayList;
import java.util.List;

/**
 * @author YPF
 */
public class FileInfoUtil {
    /**
     * 使用glob模式匹配文件名,查找符合条件的文件列表
     * @param location
     * @param glob
     * @return
     * @throws IOException
     */
    public static List<String> findFileByGlob(String location, String glob) throws IOException {
        final PathMatcher pathMatcher = FileSystems.getDefault().getPathMatcher(glob);
        List<String> fileList = new ArrayList<>();

        Files.walkFileTree(Paths.get(location), new SimpleFileVisitor<Path>() {
            @Override
            public FileVisitResult visitFile(Path path, BasicFileAttributes attrs) {
                if (pathMatcher.matches(path)) {
                    fileList.add(path.toString());
                }
                return FileVisitResult.CONTINUE;
            }

            @Override
            public FileVisitResult visitFileFailed(Path file, IOException exc) {
                return FileVisitResult.CONTINUE;
            }
        });
        return fileList;
    }

    public static void main(String args[]) throws IOException {
        String glob = "glob:**/*.{tar.gz,msi}";
        String path = "D:\\";
        System.out.println(findFileByGlob(path, glob));
    }
}

在编程设计中,Glob是一种模式,它使用通配符来指定文件名。例如:.java就是一个简单的Glob,它指定了所有扩展名为“java”的文件。Glob模式中广泛使用了两个通配符“”和“?”。其中星号表示“任意的字符或字符组成字符串”,而问号则表示“任意单个字符”。

Java SE7的NIO库中引入了Glob模式,它用于FileSystem类,在PathMatcher getPathMatcher(String syntaxAndPattern)方法中使用。Glob可以作为参数传递给PathMatcher。同样地,在Files类中也可以使用Glob来遍历整个目录。

下面是Java NIO中使用的Glob模式:

Glob模式及描述
*.{html,htm} 匹配所有扩展名为.html或.htm的文件。{ }用于组模式,它使用逗号分隔,逗号后不可以有空格

https://blog.csdn.net/weixin_34396902/article/details/89582624

相关文章

网友评论

      本文标题:java遍历文件目录

      本文链接:https://www.haomeiwen.com/subject/hhdetktx.html