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 处理其余部分。
在 *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 处理其余部分。