【问题标题】:Java 7+ NIO - Globbing the entire filesystemJava 7+ NIO - 通配整个文件系统
【发布时间】:2018-02-11 18:49:53
【问题描述】:

在 *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 中,要使用通配符,我必须创建一个 PathMatcher 并在其上测试一些 Paths。我正在构建一个命令行应用程序,用户应该能够插入一个通配模式来选择一些文件。 为了匹配目录 / 上的所有文件(递归),我不想在 / 上使用 DirectoryStream,因为它太慢了。显然,我可以解析模式并将其分成两部分,一个没有 glob,一个有 glob,并将第一部分中的所有文件匹配到第二部分。我想知道是否有一种简单的方法可以做到这一点。

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

【问题讨论】:

    标签: java shell nio glob


    【解决方案1】:

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

    如果这是您想要遵循的模式,那么答案是:什么都不做。只需让您的程序期待一个路径列表,然后让 shell 处理其余的事情。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-07-17
      • 1970-01-01
      • 1970-01-01
      • 2016-08-21
      • 2016-01-18
      • 2023-03-19
      • 1970-01-01
      相关资源
      最近更新 更多