背景:
我正在编写一个文件管理器,它从特定文件夹开始,遍历每个子文件夹及其内容。每次访问目录或文件时,我都会将路径与包含glob模式的PathMatcher(路径上匹配的目录,扩展名中匹配的文件)进行比较。如果它与模式匹配,我会将其添加到列表中供以后使用。这样我就可以基于GLOB模式构建过滤列表。我在Unix(mac)上写了这个,它似乎运行正常。当我在Windows上测试它时得到0结果。
Filter(String dirPattern, String extensionPattern) {
dirMatcher = FileSystems.getDefault().getPathMatcher(
"glob:" + dirPattern);
extensionMatcher = FileSystems.getDefault().getPathMatcher(
"glob:" + extensionPattern);
}
问题:
以这些GLOB模式为例
目录模式:
**/{foo/bar,foo/baz/,fizz/buzz/fizzbuzz}
在UNIX上可以正常工作,但在Windows上却不行。现在我已经读到JVM不应该在解释' /'作为两个平台的有效文件分隔符,但我尝试将其更改为Windows样式路径。
**\{foo\bar,foo\baz\,fizz\buzz\fizzbuzz}
需要一些转义为java:
**\\{foo\\bar,foo\\baz\\,fizz\\buzz\\fizzbuzz}
但是仍然不匹配任何东西......
我甚至尝试过操作系统检查并更换' /'使用Java File.seperator。
if (OSUtil.getCurrentOS() == OS.Windows) {
dirPattern = dirPattern.replace("/", File.separator);
extensionPattern = extensionPattern
.replace("/", File.separator);
}
似乎括号之间的文件分隔符是解释和正确的,但第一个斜杠需要是Windows样式。在这一点上,我不确定发生了什么。有没有人可以解释这个问题?任何帮助将不胜感激。