是否有Java实用程序将转换String路径以使用正确的文件分隔符char?

Gru*_*eck 22 java string file-io cross-platform jdk1.6

我开发了许多用Java操作文件的类.我正在使用Linux机器,并且一直在幸福地打字new File("path/to/some/file");.当提交时,我意识到该项目的其他一些开发人员正在使用Windows.我现在想调用一个方法,该方法可以接受表单的字符串,"/path/to/some/file"并根据操作系统返回正确分隔的路径.

例如:
"path/to/some/file"成为"path\\to\\some\\file"Windows.
在Linux上它只返回给定的String.

我意识到不会花很长时间来敲定一个可以做到这一点的正则表达式,但我不打算重新发明轮子,并且更喜欢经过适当测试的解决方案.如果它是内置于JDK中会很好,但如果它是一些小型F/OSS库的一部分也很好.

那么是否有一个Java实用程序将转换String路径以使用正确的文件分隔符char?

Bri*_*new 38

Apache Commons来救援(再次).该Commons IO方法FilenameUtils.separatorsToSystem(String path)将做你想要的.

不用说,Apache Commons IO除此之外还会做更多,值得一看.

  • 我不认为Apache Commons是一个臃肿的依赖.它做得太多了,我倾向于认为Apache Commons Lang和IO现在几乎是必不可少的. (13认同)
  • 为什么人们一直建议添加臃肿的依赖关系以避免编写一行代码? (11认同)
  • 使用commons在我的特定场景中有几个优点:它具有相当水平的保证,它可以工作并经过测试; 它是自我记录的,不像正则表达式,我会提取到静态帮助方法中; 这是一个大学项目,所以我们并不是所有人都精通正则表达.看看源代码,公共区域的解决方案非常类似于你发布的,cletus,所以它没有太大的区别.我确实在问题中指出使用小型库是好的,所以+1. (9认同)
  • 另外,您在单行代码中发现了多少错误?错过了多少假设和边缘情况? (7认同)
  • @Cletus:如果他正在使用Files,他似乎可能已经依赖于commons-io. (2认同)

Tho*_*ung 16

一个"/path/to/some/file"实际工作在Windows Vista和XP.

new java.io.File("/path/to/some/file").getAbsoluteFile()

> C:\path\to\some\file
Run Code Online (Sandbox Code Playgroud)

但它仍然不可移植,因为Windows有多个根源.因此必须以某种方式选择根目录.相对路径应该没有问题.

编辑:

除了unix和windows之外,Apache commons io对envs 没有帮助.Apache io源代码:

public static String separatorsToSystem(String path) { 
    if (path == null) {
     return null;
    }
    if (isSystemWindows()) {
      return separatorsToWindows(path);
    } else {
      return separatorsToUnix(path);
    }
}
Run Code Online (Sandbox Code Playgroud)


Dan*_*ein 6

这就是Apache commons-io所做的,展开了几行代码:

String separatorsToSystem(String res) {
    if (res==null) return null;
    if (File.separatorChar=='\\') {
        // From Windows to Linux/Mac
        return res.replace('/', File.separatorChar);
    } else {
        // From Linux/Mac to Windows
        return res.replace('\\', File.separatorChar);
    }
}
Run Code Online (Sandbox Code Playgroud)

因此,如果您想避免额外的依赖,请使用它.