Java PathMatcher:在UNIX / Windows上GLOB模式不一致

时间:2014-10-23 09:53:10

标签: java unix design-patterns nio glob

背景

我正在编写一个文件管理器,它从特定文件夹开始,遍历每个子文件夹及其内容。每次访问目录或文件时,我都会将路径与包含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样式。在这一点上,我不确定发生了什么。有没有人可以解释这个问题?任何帮助将不胜感激。

0 个答案:

没有答案