【问题标题】:Convert Windows-style path into Unix path [closed]将 Windows 样式的路径转换为 ​​Unix 路径 [关闭]
【发布时间】:2012-11-11 00:43:26
【问题描述】:

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

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

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

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

【问题讨论】:

  • 我建议展示一些代码,你想要实现什么,以及你目前拥有什么。
  • 这个问题对我来说似乎很合理,没有代码。
  • 完全明智的问题。 org.apache.commons.io.FilenameUtils.normalize(name, true) 将执行所需的操作。想要这样做是一件完全合理的事情,与其解释为什么用户不应该这样做,为什么不发布答案呢?

标签: java path


【解决方案1】:

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

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

至少在 Unix、Windows 和 iSeries 上工作。

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

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

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

编辑:

记住,String 是不可变的。

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

不会改变字符串,只返回替换后的新字符串。

【讨论】:

  • 提示:使用char 版本的.replace() 会更有效:)
  • 操作系统分隔符:Path.DirectorySeparatorChar
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2022-01-13
    • 1970-01-01
    • 1970-01-01
    • 2019-01-08
    • 1970-01-01
    • 2010-10-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多