Я пытаюсь разрешить два URIs, но это не столь просто, как я хотел бы, чтобы это было.
URI a = new URI("http://www.foo.com");
URI b = new URI("bar.html");
Проблема - это a.resolve(b).toString()
теперь "http://www.foo.combar.html"
. Как мне может сойти с рук это?
Похоже, что вы, скорее всего, хотите использовать URL, а не URI (который является более общим и должен иметь дело с менее строгим синтаксисом)
URI a = new URI("http://www.foo.com");
URI b = new URI("bar.html");
URI c = a.resolve(b);
c.toString() -> "http://www.foo.combar.html"
c.getAuthority() -> "www.foo.com"
c.getPath() -> "bar.html"
URI's toString() ведет себя не так, как вы ожидаете, но, учитывая его общий характер, это можно простить.
К сожалению, метод URI toURL() ведет себя не совсем так, как я надеялся, чтобы дать вам то, что вы хотите.
URL u = c.toURL();
u.toString() -> "http://www.foo.combar.html"
u.getAuthority() -> "www.foo.combar.html" --- Oh dear :(
Так что лучше всего просто начать с URL, чтобы получить желаемое:
URL x = new URL("http://www.foo.com");
URL y = new URL(x, "bar.html");
y.toString() -> "http://www.foo.com/bar.html"