Java 7+ NIO - 遍历整个文件系统

Java 7+ NIO - Globbing the entire filesystem

在 *nix 系统中,如果您在目录上使用带有 glob 的命令,shell(或命令?)不会检查文件系统中的所有文件。

例如:

ls /System/Library/J*/**

/System/Library/Java/Extensions:
MRJToolkit.jar

/System/Library/Java/Support:
CoreDeploy.bundle

我的 Mac 没有检查整个文件系统,只检查了 /System/Library 中的文件。 在 Java 7+ NIO 中,要使用 globbing,我必须创建一个 PathMatcher 并在其上测试一些 Path。我正在构建一个命令行应用程序,用户应该能够向 select 一些文件插入通配模式。 为了匹配目录 / 上的所有文件(递归),我不想在 / 上使用 DirectoryStream 因为它太慢了。显然我可以解析模式并将其分成两部分,一个没有 globs,一个有 globs,然后将第一部分中的所有文件与第二部分匹配。我想知道是否有一种简单的方法可以做到这一点。

另一个问题是,如果用户直接插入路径,应用程序不应该进行任何路径匹配。我正在寻找一种接受 String 并给我 List<Path>.

的方法

Globbing 通常是 shell 的工作,而不是每个应用程序的工作。在您给出的示例中,shell 将 /System/Library/J*/** 扩展为路径列表。 ls 没有看到 glob。它会看到结果列表。

如果那是您想遵循的模型,那么答案是:什么都不做。只需让您的程序期待一个路径列表,让 shell 处理其余部分。