一尘不染

如何在Java中合并路径?

java

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

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


阅读 866

收藏
2020-03-17

共3个答案

一尘不染

在Java 7中,你应该使用resolve

Path newPath = path.resolve(childPath);

虽然NIO2 Path类对于使用不必要的不​​同API的File似乎有点多余,但实际上它更优雅,更强大。

请注意,Paths.get()(根据其他人的建议)并没有带有的重载Path,并且这样做Paths.get(path.toString(), childPath)与并不相同resolve()。从Paths.get()文档:

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

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

功能resolve出色relativize

Path childPath = path.relativize(newPath);
2020-03-17
一尘不染

不是让所有内容都基于字符串,你应该使用旨在表示文件系统路径的类。

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

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();
}
2020-03-17
一尘不染

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

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

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();
}
2020-09-23