如何在Java中合并路径?

主宰稳场 提交于 2020-03-09 20:49:45

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

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


#1楼

在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);

#2楼

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

如果您使用的是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();
}

#3楼

主要的答案是使用File对象。 但是Commons IO确实有一个类FilenameUtils可以执行这种操作,例如concat()方法。


#4楼

为了增强JodaStephen的答案,Apache Commons IO具有FilenameUtils来执行此操作。 示例(在Linux上):

assert org.apache.commons.io.FilenameUtils.concat("/home/bob", "work\\stuff.log") == "/home/bob/work/stuff.log"

它是独立于平台的,可以生成系统所需的任何分隔符。


#5楼

如果您不需要的只是字符串,则可以使用com.google.common.io.Files

Files.simplifyPath("some/prefix/with//extra///slashes" + "file//name")

要得到

"some/prefix/with/extra/slashes/file/name"
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!