2016-11-12 69 views
0

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

如果我只是使用Paths.get()它会调用Filesystem.getDefault(),最终会像Windows路径一样处理它。解析似乎在我的测试中工作,但它们相当简陋,当然toString使用错误的路径分隔符。

我可以手动加载LinuxFileSystem吗?或者,我应该使用commons-io解析器吗?

+1

我相信Windows 2000以后的所有Windows系统都会在它们的API中接受'/'和''\''作为文件分隔符。所以很可能你不需要做任何事情,只要Windows上的所有东西都在同一个驱动器上。如果这不起作用,请举例说明什么不起作用以及您想要完成什么。 – ajb

+0

就像我说过的,它在我的基本测试中解析,但输出是使用错误的路径分隔符。我怀疑Windows解析器可能在反斜杠中存在一些问题,这些反斜杠在* ix路径名中是合法的。 – Ian

+0

我对此表示怀疑,因为一个JDK发行版面向Unix或Windows。我想到的唯一机会是你寻找一些UnixFileSystemProvider的开源发行版并导入你的应用程序的运行时。即使在这种情况下,我也怀疑,因为UnixFileSystemProvider处理底层操作系统的底层细节 - 而不仅仅是路径分隔符。 –

回答

1

我可以手动加载LinuxFileSystem吗?

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

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

0

看起来@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的代替。