在Java中使用glob匹配路径字符串

在Java中使用glob匹配路径字符串,java,glob,Java,Glob,我有以下字符串作为全局规则: **/*.txt 测试数据: /foo/bar.txt /foo/buz.jpg /foo/oof/text.txt 是否可以使用glob规则(不将glob转换为regex)来匹配测试数据并返回valud条目 一个要求:Java 1.6如果您有Java 7,可以使用: 这将需要将字符串转换为Path的实例: final Path myPath = Paths.get("/foo/bar.txt"); 对于Java的早期版本,您可能会从ApacheCommons

我有以下字符串作为全局规则:

**/*.txt
测试数据:

/foo/bar.txt
/foo/buz.jpg
/foo/oof/text.txt
是否可以使用glob规则(不将glob转换为regex)来匹配测试数据并返回valud条目


一个要求:
Java 1.6

如果您有Java 7,可以使用:

这将需要将字符串转换为
Path
的实例:

final Path myPath = Paths.get("/foo/bar.txt");

对于Java的早期版本,您可能会从ApacheCommons中获得一些好处。您还可以尝试从Spring中窃取一些代码,这与glob-to-regex方法非常接近。

添加到前面的答案:
org.apache.commons.io.FilenameUtils.wildcardMatch(filename,wildcardMatcher)
来自Apache
commons lang
库。

是一种抽象方法,不能直接使用。您需要首先获取一个文件系统实例,例如默认实例:

PathMatcher m = FileSystems.getDefault().getPathMatcher("glob:**/*.txt");
一些例子:

// file path
PathMatcher m = FileSystems.getDefault().getPathMatcher("glob:**/*.txt");
m.matches(Paths.get("/foo/bar.txt"));                // true
m.matches(Paths.get("/foo/bar.txt").getFileName());  // false

// file name only
PathMatcher n = FileSystems.getDefault().getPathMatcher("glob:*.txt");
n.matches(Paths.get("/foo/bar.txt"));                // false
n.matches(Paths.get("/foo/bar.txt").getFileName());  // true

在纯Java中,或者您愿意看看第三方实现吗?我首选纯Java。不过,也可以接受第三方LIB。您可以根据需要进行黑客攻击。@Boristeider谢谢。但是,它是从Java1.7开始就可用的——我没有提到它——我必须用Java1.6编译它,因为它在1.6中不可用(请参阅)。你为什么禁止自己使用“glob to regex”技术?您也可以使用Library,我必须用1.6编译jar
// file path
PathMatcher m = FileSystems.getDefault().getPathMatcher("glob:**/*.txt");
m.matches(Paths.get("/foo/bar.txt"));                // true
m.matches(Paths.get("/foo/bar.txt").getFileName());  // false

// file name only
PathMatcher n = FileSystems.getDefault().getPathMatcher("glob:*.txt");
n.matches(Paths.get("/foo/bar.txt"));                // false
n.matches(Paths.get("/foo/bar.txt").getFileName());  // true