2012-11-11 127 views
4

我想要一个表示路径的字符串并将其转换为绝对的Unix样式路径。此字符串可以是Windows或Unix样式,因为它是调用MainClass.class.getClassLoader().getResource("").getPath()的结果,它根据您的系统返回不同的样式路径。 (我正在为我正在写的游戏做这个,其中一部分给了用户一个简单的“bash-ish”shell,我希望用户能够读取文件。假的文件系统是作为正常的目录树存储在我的项目的子目录中,这个文件系统将使用Unix风格的路径,我希望能够将输入的路径与前面提到的字符串连接起来(通过一些小的编辑将它们放到正确的目录中)所以我可以找到文件的内容。)将Windows风格的路径转换为Unix路径

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

目前我只是用一个简单的东西来检查字符串是以“C:\”开头还是类似的东西,然后用斜线代替反斜杠,但是没有办法可以成为一种好方法去做这件事,我相信其他人以前也遇到过不同路径的问题。这当然是一个非常临时的解决方案。

+0

我会建议显示一些代码,你试图实现什么,以及你现在拥有什么。 – jtahlborn

+0

这个问题对我来说似乎没有代码就足够合理。 – subie

+0

完美合理的问题。 org.apache.commons.io.FilenameUtils.normalize(name,true)将执行所需的操作。这是一个完全合理的事情,而不是解释为什么用户不应该,为什么不发布答案? – Rich

回答

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风格的路径(只是从我自己的经验中说)。

13

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

new File("https://stackoverflow.com/a/b/c.txt"); 

工作至少在UNIX,Windows和iSeries。

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

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

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

编辑:

记住,字符串是不可改变的。

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

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

+1

提示:使用'.replace()'的'char'版本会稍微高效:) – Qix