如果操作系统是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();
答案 0 :(得分:8)
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
来获取规范表示,如果您愿意,可以使用反斜杠而不是正斜杠。
答案 1 :(得分:3)
Jon Skeet是对的,但我想说微软仅在命令解释器中强制使用\
。 API中的每个位置都可以使用/
。
因此,如果已启动的计划为String f = "some/path/file.ext";
,您可以在ProcessBuilder
的任何地方使用cmd.exe
。
要转换路径,我使用String.replaceAll( "\\\\", "/" );
答案 2 :(得分:1)
路径通常存储在属性文件中,对于我使用过的大多数应用程序,我们一直使用备选方案2。
其中一个原因是它在windows和linux之间看起来很相似。
/ path或C:/ path
它也是最干净,最易读的替代品。