将Windows风格的路径转换为Unix路径

我想采用一个表示路径的字符串并将其转换为绝对的Unix风格路径。 这个字符串可以是Windows或Unix样式,因为它是调用MainClass.class.getClassLoader().getResource("").getPath() ,它根据您的系统返回不同的样式路径。

(我正在为我正在编写的游戏执行此操作,其中一部分为用户提供了一个简单的“bash-ish”shell,我希望用户能够读取文件。假文件系统存储为正常在我的项目的子目录中的目录树。这个文件系统将使用Unix风格的路径,我希望能够将输入的路径与前面提到的字符串连接起来(通过一些小的编辑将它放到正确的目录中)所以我可以找到文件的内容。)

我有什么想法可以这样做吗? 我尝试了很多东西,但我似乎无法让它在我朋友的Windows 7系统上正常工作。

目前我只是使用一个简单的东西来检查字符串是否以“C:\”或类似的东西开头,然后用斜杠替换反斜杠,但是这没有办法让它成为一个很好的方法来解决这个问题。 ,我相信其他人之前遇到过不同路径风格的问题。 这当然是一个非常临时的解决方案。

一般来说,我在使用’/’作为分隔符的任何操作系统上都没有遇到任何问题。

  new File("/a/b/c.txt"); 

至少在Unix,Windows和iSeries上运行。

如果你想要正确,有一个常量’File.separator’,它保存操作系统分隔符。

如果要替换字符串中的反斜杠“\”,请记住它是一个特殊的转义字符:

 String newString = str.replace("\\","/"); 

编辑:

并记住,String是不可变的。

  str.replace("\\","/"); 

不会更改字符串,只返回带有替换字符的新字符串。

如果你想要做的就是能够访问具有某个目录的相对名称的文件,你可以使用普通的File API,如下所示:

 final String baseDir = MainClass.class.getClassLoader().getResource("").getPath(); final String relativeName = "audio/abc.mp3"; final File relativeFile = new File(baseDir, relativeName); final String canonicalPath = relativeFile.getCanonicalPath(); 

它应该适用于Unix和Windows,因为Windows接受Unix和Windows风格的路径(根据我自己的经验说它)。