如何使用JavaGlob模式搜索(区分大小写)文件?
我正在检查上课的方法。该方法的文件说明: 对于glob和regex语法,匹配的详细信息,例如 匹配是否区分大小写,是否依赖于实现 因此没有具体说明 我对此进行了测试,并了解到默认情况下它不区分大小写。如何区分大小写如何使用JavaGlob模式搜索(区分大小写)文件?,java,glob,Java,Glob,我正在检查上课的方法。该方法的文件说明: 对于glob和regex语法,匹配的详细信息,例如 匹配是否区分大小写,是否依赖于实现 因此没有具体说明 我对此进行了测试,并了解到默认情况下它不区分大小写。如何区分大小写 我在Windows7上使用JDK7u25。否,默认情况下它不区分大小写。正如doc所说,区分大小写取决于实现 NTFS保留大小写,但不区分大小写。也就是说,名为README.txt的文件将保留其大小写(保留大小写);但是,试着用名称Readme.TXT来查找它会起作用(不区分大小写)
我在Windows7上使用JDK7u25。否,默认情况下它不区分大小写。正如doc所说,区分大小写取决于实现 NTFS保留大小写,但不区分大小写。也就是说,名为
README.txt
的文件将保留其大小写(保留大小写);但是,试着用名称Readme.TXT
来查找它会起作用(不区分大小写)
Unix系统不是这种情况,其文件系统区分大小写
不幸的是,这是没有办法的!除了创建自己的文件系统
实现之外,还可以包装默认值并使其区分大小写
下面是一个用途非常有限的文件系统的示例,它能够生成文件扩展名的“区分大小写匹配”:
public final class CaseSensitiveNTFSFileSystem
extends FileSystem
{
private static final Pattern MYSYNTAX = Pattern.compile("glob:\\*(\\..*)");
private final FileSystem fs;
// "fs" is the "genuine" FileSystem provided by the JVM
public CaseSensitiveNTFSFileSystem(final FileSystem fs)
{
this.fs = fs;
}
@Override
public PathMatcher getPathMatcher(final String syntaxAndPattern)
{
final Matcher matcher = MYSYNTAX.matcher(syntaxAndPattern);
if (!matcher.matches())
throw new UnsupportedOperationException();
final String suffix = matcher.group(1);
final PathMatcher orig = fs.getPathMatcher(syntaxAndPattern);
return new PathMatcher()
{
@Override
public boolean matches(final Path path)
{
return orig.matches(path)
&& path.getFileName().endsWith(suffix);
}
};
}
// Delegate all other methods of FileSystem to "fs"
}
谢谢你的快速回复。你能帮我创建自己的Filsystem实现并通过举例说明区分大小写吗?嗯,这一点都不简单。你必须使用构图和解释模式。。。这可不容易,谢谢。但我不想使用Pattern和Matcher,因为我想在我的功能中保持regex和glob的分离。无论如何,谢谢。这里我只使用模式来识别
路径匹配器的语法。当然是有限的子集!但这说明了如何做到这一点。