如何在Java中组合路径?

2022-08-31 04:36:38

在 C#/.NET 中,System.IO.Path.Combine() 是否有 Java 等效项?或者任何代码来实现这一点?

此静态方法将一个或多个字符串合并到一个路径中。


答案 1

而不是保持所有内容基于字符串,您应该使用一个旨在表示文件系统路径的类。

如果您使用的是Java 7或Java 8,您应该强烈考虑使用java.nio.file.Path; 可用于将一个路径与另一个路径或字符串组合。路径帮助程序类也很有用。例如:Path.resolve

Path path = Paths.get("foo", "bar", "baz.txt");

如果你需要满足 Java-7 之前的环境,你可以使用 java.io.File,如下所示:

File baseDirectory = new File("foo");
File subDirectory = new File(baseDirectory, "bar");
File fileInDirectory = new File(subDirectory, "baz.txt");

如果以后希望将其恢复为字符串,可以调用 。事实上,如果你真的想模仿,你可以这样写:getPath()Path.Combine

public static String combine(String path1, String path2)
{
    File file1 = new File(path1);
    File file2 = new File(file1, path2);
    return file2.getPath();
}

答案 2

在 Java 7 中,您应该使用解析

Path newPath = path.resolve(childPath);

虽然NIO2 Path类对于具有不必要的不同API的文件来说似乎有点多余,但实际上它微妙地更加优雅和健壮。

请注意,(如其他人所建议的)没有重载,并且执行 操作与 不是一回事。从 Paths.get() 文档中Paths.get()PathPaths.get(path.toString(), childPath)resolve()

请注意,虽然此方法非常方便,但使用它将意味着对默认文件系统的假定引用,并限制调用代码的实用性。因此,它不应该用于旨在灵活重用的库代码中。更灵活的替代方法是使用现有 Path 实例作为锚点,例如:

Path dir = ...
Path path = dir.resolve("file");

姊妹函数是优秀的相对化resolve

Path childPath = path.relativize(newPath);

推荐