下面是一个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的文件。{ }用于组模式,它使用逗号分隔,逗号后不可以有空格
网友评论