【问题标题】:Will forward slash work across platforms in Path.resolve?Path.resolve 中的正斜杠是否可以跨平台工作?
【发布时间】:2015-03-27 18:31:10
【问题描述】:

由于Path.resolve 不接受字符串数组,因此可以传递包含多个路径组件的相对路径,例如"foo/bar/baz"

我的问题是

如果这样的相对路径中的正斜杠可以跨平台按预期工作?

我在这里看到了一些答案,声称 Java 将正斜杠视为“通用分隔符”,而不是引用来支持它们。

【问题讨论】:

  • 正斜杠是 MS Windows 上的备用分隔符,但不是,例如,在 Mac OS 9 上。
  • @aioobe 如果我没记错的话,正斜杠可以是 OS 9 上文件名的正常部分。所以你可以有一个名为“Meeting Notes 12/5/2000”的文件。当然,OS 9 不再是一个主要平台。但这是该功能背后的部分原因。在 OSX 中,使用基于 unix 的文件系统,它会在内部将其存储为文件名中的冒号。

标签: java path


【解决方案1】:

/ 应该是当今所有主要平台上的有效路径分隔符。参见例如File.separator vs Slash in Paths(也许它甚至是一个骗局?)

如果你是书呆子类型,你可以使用FileSystem.getSeparator

注意,你也可以这样做

root.resolve(Paths.get("foo", "bar", "baz"));

【讨论】:

  • 那么最短的方法是path.resolve(path.getFileSystem().getPath("foo", "bar", "baz"))?
  • foo是根目录,还是有路径root想构造root/foo/bar/baz
  • 第二个。有一条路径,想以最简洁的方式计算一些相对的东西。在我看来,应该有一个resolve 方法接受一个字符串数组,但可惜我们没有。
【解决方案2】:

没有。 Path 对象中的典型/ 称为名称分隔符。它是在创建 PathFileSystem 对象中定义的。

您可以使用FileSystem#getSeparator() 检索它。

返回名称分隔符,表示为字符串。

名称分隔符用于分隔路径字符串中的名称。一个 实现可能支持多个名称分隔符,在这种情况下 方法返回实现特定的默认名称分隔符。这个 通过调用创建路径字符串时使用分隔符 toString() 方法。

在默认提供者的情况下,此方法返回相同的 分隔符为java.io.File.separator

您可以使用Path#getFileSystem() 检索PathFileSystem

据我所知,所有典型的文件系统都会使用 / 作为分隔符,但您可以编写自己的 FileSystem 实现,但不会。

【讨论】:

    【解决方案3】:

    您可以先通过FileSystem.getPath("foo", "bar", "baz") 获取Path,而不是将String 发送到Path.resolve(),您可以使用接受Path 的重载。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-30
      • 1970-01-01
      • 2013-11-14
      • 2011-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多