3

如果操作系统是 Windows,下面给出的哪个是 Java 编码的最佳方法?

1)

 String f = "some\\path\\file.ext"; 
2)
 String f = "some/path/file.ext"; 
3)
  String f = "some"+File.separator+"path"+File.separator+"file.ext"; 
4)
 String f = new StringBuilder("some").append(File.separator).append("path").append(File.separator).append("file.ext").toString(); 

4

3 回答 3

9

编辑:鉴于评论,我应该澄清一下。这绝对取决于上下文。你想做什么?如果您尝试以“本机”操作系统格式创建文件路径,我将使用选项 5,使用File

File f = new File("some");
f = new File(f, "path");
f = new File(f, "file.ext");

或者更好的是,将此逻辑放入一个方法中:

public static File newFile(String root, String... parts) {
    // TODO: Check that nothing's null (root, parts, each element of parts)
    File ret = new File(root);
    for (String part : parts) {
        ret = new File(ret, part);
    }
    return ret;
}

然后你可以调用它:

File f = SomeUtilityClass.newFile("some", "path", "file.ext");

(这可能存在于最近的 JRE 中,但如果是这样,我不知道在哪里。)

如果您只需要适用于FileInputStream等的东西,那么我可能只是对正斜杠进行硬编码,原因有两个:

  • 它们比反斜杠更容易阅读
  • 他们也可以在其他操作系统上工作

无论哪种方式,我可能仍然会创建一个File,因为它为该值提供了更清晰的含义。Java 中的大多数 IO API 在File适当的情况下接受 - 并且它使围绕它的所有代码都清楚这一个文件路径。所以你可以使用:

File file = new FIle("some/path/file.ext");

...这仍然可以在 Windows 上运行。然后,您可以使用File.getCanonicalFile来获得规范表示,如果您愿意,它将具有反斜杠而不是正斜杠。

于 2013-05-19T07:14:19.013 回答
3

Jon Skeet是对的,但我想说微软\只在命令解释器中强制使用。API 中您可以使用的任何地方/

所以你可以String f = "some/path/file.ext";在任何地方使用,但ProcessBuilder如果启动的程序是cmd.exe.

要转换路径,我使用String.replaceAll( "\\\\", "/" );

于 2013-05-19T07:18:22.560 回答
1

路径通常存储在属性文件中,对于我使用过的大多数应用程序,我们总是使用替代 2。

造成这种情况的原因之一是它在 windows 和 linux 之间看起来很相似。

/path 或 C:/path

它也是最干净和最易读的替代方案。

于 2013-05-19T07:31:25.573 回答