我正在检查getPathMatcher课程的FileSystem方法。该方法的文档说:
对于glob和regex语法,匹配的细节,例如 匹配是否区分大小写,取决于实现 因此没有具体说明。
我对此进行了测试,并且知道默认情况下它不区分大小写。如何使其区分大小写?
我在Windows7上使用JDK7u25。
答案 0 :(得分:3)
不,默认情况下不区分大小写。正如文档所说,区分大小写取决于实现。
NTFS是案例保留但不区分大小写。也就是说,名为README.txt
的文件将保留其大小写(保留大小写);但是尝试通过名称Readme.TXT
找到它,比如说,将工作(不区分大小写)。
在Unix系统上并非如此,其文件系统 区分大小写。
不幸的是,没有办法解决这个问题!除了创建自己的Filesystem
实现包装默认值并使其区分大小写。
以下是一个非常有限的目的FileSystem
的示例,它将能够生成文件扩展名的“区分大小写的匹配”:
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"
}