【问题标题】:Processing unix paths in Windows在 Windows 中处理 unix 路径
【发布时间】:2016-11-12 06:34:56
【问题描述】:

在 Windows 上运行时处理 *ix 文件路径字符串的最佳方式是什么?

如果我只使用Paths.get(),它会调用Filesystem.getDefault(),最终会像Windows 路径一样处理它。解析似乎在我的测试中有效,但它们非常初级,当然toString 使用了错误的路径分隔符。

我可以以某种方式手动加载 LinuxFileSystem 吗?还是应该改用commons-io 解析器?

【问题讨论】:

  • 我相信自 Windows 2000 以来的所有 Windows 系统都在其 API 中接受 /'\' 作为文件分隔符。所以很可能你不需要做任何事情,只要 Windows 上的所有东西都在同一个驱动器上。如果这不起作用,请举例说明什么不起作用以及您想要完成什么。
  • 就像我说的它在我的基本测试中解析,但输出使用了错误的路径分隔符。我怀疑 Windows 解析器可能存在一些反斜杠问题,这些反斜杠在 *ix 路径名中是合法的。
  • 我对此表示怀疑,因为一个 JDK 发行版要么面向 Unix,要么面向 Windows。我想到的唯一机会是您寻找一些 UnixFileSystemProvider 的开源发行版并导入应用程序的运行时。即使在这种情况下,我也有疑问,因为 UnixFileSystemProvider 处理来自底层操作系统的低级细节——而不仅仅是路径分隔符。
  • @LittleSanti:答案是你的权利。想要积分请领取!
  • @Downvoter:为什么要投反对票?你不明白什么?

标签: java nio filepath


【解决方案1】:

我可以以某种方式手动加载 LinuxFileSystem 吗?

我对此表示怀疑,因为一个 JDK 发行版要么面向 Unix,要么面向 Windows。我想到的唯一机会是你寻找一些 UnixFileSystemProvider 的开源发行版并导入到你的应用程序的运行时。

但即使在这种情况下,我也怀疑它是否会 100% 工作,因为 FileSystemProvider 类处理来自底层操作系统的低级细节 - 不仅仅是路径分隔符,因此存在不会的风险通过 Windows 文件系统兼容。

【讨论】:

    【解决方案2】:

    看起来@Little Santi 对这个问题的评论实际上就是答案。如果我跑:

    for (FileSystemProvider provider: FileSystemProvider.installedProviders()) {
      System.out.println(provider.getClass().getName());
    }
    

    我明白了:

    sun.nio.fs.WindowsFileSystemProvider
    com.sun.nio.zipfs.ZipFileSystemProvider
    

    如果我正确解释这意味着我不能在 Windows 下使用 LinuxFileSystem 路径方法,但应该使用 commons-io。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-08
      • 2021-09-18
      • 1970-01-01
      • 2012-01-27
      • 2011-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多