【发布时间】:2021-04-01 11:06:39
【问题描述】:
我正在尝试使用 PathMatcher 匹配相对路径。一个非常常见的情况是使用**/foo.php 之类的模式来匹配所有名为foo.php 的文件,无论它们位于哪个文件夹中。
但是当文件实际上不在任何文件夹中时,我发现了一种对我来说看起来不对的行为:
import java.nio.file.FileSystems;
import java.nio.file.Path;
import java.nio.file.PathMatcher;
import java.nio.file.Paths;
public class PathMatcherTest {
public static void main(String[] args) {
testMatch("foo.php", Paths.get("foo.php"));
testMatch("foo.php", Paths.get("sub/foo.php"));
testMatch("**/foo.php", Paths.get("sub/foo.php"));
testMatch("**/foo.php", Paths.get("foo.php"));
}
private static void testMatch(String pattern, Path path) {
PathMatcher pathMatcher = FileSystems.getDefault().getPathMatcher("glob:" + pattern);
if (pathMatcher.matches(path)) {
System.out.println(pattern + " matches " + path);
} else {
System.out.println(pattern + " doesn't matches " + path);
}
}
}
产生:
foo.php 匹配 foo.php // OK foo.php 不匹配 sub/foo.php // OK **/foo.php 匹配 sub/foo.php // OK **/foo.php 不匹配 foo.php // KO,为什么 ????为什么 GLOB 模式 **/foo.php 不匹配 foo.php?我是误读了规范,还是一个错误?
【问题讨论】: