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"
来源:oschina
链接:https://my.oschina.net/stackoom/blog/3190693