我正在检查FileSystem类的getPathMatcher方法。该方法的文档说:
对于 glob 和 regex 语法,匹配细节(例如匹配是否区分大小写)取决于实现,因此未指定。
我对此进行了测试,发现默认情况下它不区分大小写。如何使其区分大小写?
我在 Windows7 上使用 JDK7u25。
我正在检查FileSystem类的getPathMatcher方法。该方法的文档说:
对于 glob 和 regex 语法,匹配细节(例如匹配是否区分大小写)取决于实现,因此未指定。
我对此进行了测试,发现默认情况下它不区分大小写。如何使其区分大小写?
我在 Windows7 上使用 JDK7u25。
不,默认情况下它不区分大小写。正如文档所说,区分大小写取决于实现。
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"
}