Почему java.io.URL удаляет последнюю папку? - PullRequest
1 голос
/ 25 февраля 2012

Я обнаружил ошибку в библиотеке, которую использует мое приложение. Я сузил проблему до поведения класса java.net.URL и того, как библиотека использует его для поиска ресурсов.

Когда я запускаю следующий код, вывод будет file:/root/myfile.xml вместо file:/root/folder/myfile.xml.

public static void main(String[] args) throws MalformedURLException {
    String location = "file:///root/folder";
    String spec = "myfile.xml";

    URL context = new URL(location);
    URL url = new URL(context, spec);

    System.out.println(url);
}

Я получу ожидаемый результат, если добавлю косую черту к location.

Мне любопытно, почему java.net.URL ведет себя так?

1 Ответ

3 голосов
/ 25 февраля 2012

Со страницы java.net.url:

Приложение также может указать «относительный URL», который содержит только достаточно информации для доступа к ресурсу относительно другого URL.Относительные URL-адреса часто используются на страницах HTML.Например, если содержимое URL-адреса:

 http://java.sun.com/index.html   

содержит внутри него относительный URL-адрес:

 FAQ.html   

, это будет сокращение для:

 http://java.sun.com/FAQ.html

Таким образом, исключая завершающий / из location, вы не указываете конструктору URL, что он является корнем для спецификации, а не относительным путем, к которому нужно присоединиться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...