在c# /.NET中有System.IO.Path.Combine()的Java等价程序吗?或者任何代码来完成这个?

这个静态方法将一个或多个字符串组合成一个路径。


当前回答

主要的答案是使用File对象。然而,Commons IO确实有一个类FilenameUtils可以做这种事情,比如concat()方法。

其他回答

主要的答案是使用File对象。然而,Commons IO确实有一个类FilenameUtils可以做这种事情,比如concat()方法。

如果只需要字符串,可以使用com.google.common.io.Files

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

得到

"some/prefix/with/extra/slashes/file/name"

平台独立的方法(使用File。分隔符,即将工作取决于代码运行的操作系统:

java.nio.file.Paths.get(".", "path", "to", "file.txt")
// relative unix path: ./path/to/file.txt
// relative windows path: .\path\to\filee.txt

java.nio.file.Paths.get("/", "path", "to", "file.txt")
// absolute unix path: /path/to/filee.txt
// windows network drive path: \\path\to\file.txt

java.nio.file.Paths.get("C:", "path", "to", "file.txt")
// absolute windows path: C:\path\to\file.txt

这也适用于Java 8:

Path file = Paths.get("Some path");
file = Paths.get(file + "Some other path");

我知道距离Jon最初的回答已经有很长时间了,但我对OP有类似的要求。

通过扩展Jon的解决方案,我想出了下面的方法,这将占用一个或多个路径段占用尽可能多的路径段。

使用

Path.combine("/Users/beardtwizzle/");
Path.combine("/", "Users", "beardtwizzle");
Path.combine(new String[] { "/", "Users", "beardtwizzle", "arrayUsage" });

这里为其他有类似问题的人编写代码

public class Path {
    public static String combine(String... paths)
    {
        File file = new File(paths[0]);

        for (int i = 1; i < paths.length ; i++) {
            file = new File(file, paths[i]);
        }

        return file.getPath();
    }
}