3

特别是,我想使用 (不幸的是不可见) sun.nio.fs.Globs.toUnixRegexPattern(String glob)

好的,退后一步并提供一些背景信息

我有一个路径迭代器到一个远程的、类似 unix 的文件系统(想想ssh unixhost find path -type f)。我还有一个用户提供的 glob 模式,我现在想匹配每条路径。

在 unix 机器上,以下工作正常:

matcher = FileSystems.getDefault().getPathMatcher("glob:" + glob);
// ...
for (String s : remoteFind(...)) {
    if (matcher.matches(Paths.get(s))) {
       // matches, do something
    }
}

但是当它在 Windows 上运行时,相同的程序完全失败,因为 FileSystems.getDefault() 返回一个 Windows 文件系统(恐怖,恐怖)并且 '\' 用作分隔符,等等。你得到了图片。没有什么匹配的。

当然我可以停止所有这些废话,只是重写(或者更确切地说,复制)sun.nio.fs.Globs.toUnixRegexPattern(String glob),但是还有另一种更优雅的方式吗?

4

2 回答 2

1

好的,所以只是为了结束这个问题,如评论中所述,我最终在我的方法中编写了一个FileUtil几乎逐字复制sun.nio.fs.Globs.toUnixRegexPattern(String glob). 效果很好。

如果有人找到更好的方法,请在此处添加不同的答案。

于 2012-08-03T03:32:23.353 回答
0

如果您不在本地进行任何文件系统操作,您可以尝试设置

 -Dfile.separator=/

模仿unix路径分隔符的系统变量。此变量应在启动时传递给 JVM

于 2011-11-08T07:53:21.230 回答