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

cha*_*een 8 java path

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

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

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

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

Udo*_*ski 16

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

 new File("/a/b/c.txt");
Run Code Online (Sandbox Code Playgroud)

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

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

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

String newString = str.replace("\\","/");
Run Code Online (Sandbox Code Playgroud)

编辑:

并记住,String是不可变的.

 str.replace("\\","/");
Run Code Online (Sandbox Code Playgroud)

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

  • 提示:使用`.replace()`的`char`版本会更有效:) (2认同)

Shy*_*hyJ 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();
Run Code Online (Sandbox Code Playgroud)

它应该可以在 Unix 和 Windows 上运行,因为 Windows 接受 Unix 和 Windows 风格的路径(只是根据我自己的经验说的)。