11

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

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

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

目前我只是使用一个简单的东西来检查字符串是否以“C:\”或类似的东西开头,然后用斜杠替换反斜杠,但这不可能是解决这个问题的好方法,而且我敢肯定其他人以前也遇到过不同路径样式的问题。这当然是一个非常临时的解决方案。

4

2 回答 2

16

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

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

至少适用于 Unix、Windows 和 iSeries。

如果你想正确的话,有一个常量“File.separator”,它包含操作系统分隔符。

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

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

编辑:

请记住,String 是不可变的。

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

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

于 2012-11-11T01:20:59.040 回答
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 样式的路径(仅根据我自己的经验说)。

于 2012-11-11T01:15:06.993 回答