在 Java 中查找从一个 URL 到另一个 URL 的相对路径

Bri*_*ian 4 java url relative-path

给定两条路径,如何计算从一条到另一条的相对路径?

我想过split以奇特的方式使用,但它似乎有点笨拙,尤其是在以下情况下:"http://foo.com/bar/baz#header""http://foo.com/bar/baz"?param=value.

一个例子是:

String url1 = "http://foo.com/bar/baz";
String url2 = "http://foo.com/bar/qux/quux/corge";

System.out.println(relative(url1, url2)); // -> "../qux/quux/corge"
Run Code Online (Sandbox Code Playgroud)

PNS*_*PNS 5

Java 已经提供了此功能,因此最安全的选择是采用“标准”方式:

String url1 = "http://foo.com/bar/baz";
String url2 = "http://foo.com/bar/qux/quux/corge";

Path p1 = Paths.get(url1);
Path p2 = Paths.get(url2);
Path p  = p1.relativize(p2);

System.out.println("Relative path: " + p);
Run Code Online (Sandbox Code Playgroud)

print上面的语句显示了正确的相对路径 - 即,在这种情况下,

../qux/quux/corge
Run Code Online (Sandbox Code Playgroud)

如果协议(例如,http 与 https)和主机部分可能不同,那么将url1url2以上转换为URL对象and using thegetPath()` 方法,应该会产生正确的相对路径。

  • 我将 `Path p1 = Paths.get(url1);` 更改为 `p1 = Paths.get(new URL(url1).getPath());` 并更改为 `p2` 并且它可以工作。 (2认同)