我将以下字符串作为全局规则:
**/*.txt
测试数据:
/foo/bar.txt
/foo/buz.jpg
/foo/oof/text.txt
是否可以使用glob规则(不将glob转换为regex)来匹配测试数据并返回valud条目?
一项要求:Java 1.6
答案 0 :(得分:5)
如果您有Java 7可以使用FileSystem.getPathMatcher
:
final PathMatcher matcher = FileSystem.getPathMatcher("glob:**/*.txt");
这需要将您的字符串转换为Path
:
final Path myPath = Paths.get("/foo/bar.txt");
对于早期版本的Java,您可能会从Apache Commons' WildcardFileFilter
。您也可以尝试从Spring的AntPathMatcher
中窃取一些代码 - 这些代码与glob-to-regex方法非常接近。
答案 1 :(得分:2)
要添加到上一个答案:org.apache.commons.io.FilenameUtils.wildcardMatch(filename, wildcardMatcher)
来自Apache commons-lang
库。
答案 2 :(得分:0)
FileSystem#getPathMatcher(String)
是一种抽象方法,您不能直接使用它。您需要先获取一个FileSystem实例,例如默认值:
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