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

时间:2012-11-11 00:43:27

标签: java path

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

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

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

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

2 个答案:

答案 0 :(得分:14)

一般情况下,我在使用“/”作为分隔符的任何操作系统上都没有遇到任何问题。

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

至少适用于Unix,Windows和iSeries。

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

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

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

修改

并记住,String是不可变的。

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

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

答案 1 :(得分:0)

如果您只想访问具有某个目录的相对名称的文件,则可以使用普通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风格的路径(仅根据我自己的经验说明)。