Прием обоих путей к файлам и URL в Java

#java #url #uri

#java #url #uri

Вопрос:

Существует ли метод, который будет принимать следующие пути и возвращать соответствующий URI:

 test.xml // File in CWD
./test.xml // The same
../test.xml // File in parent directory
/etc/test.xml // Absolute path
file:///etc/test.xml // Full URL
http://example.com/test.xml // URL for http
 

В настоящее время все, о чем я могу думать, это анализировать как url (URL.create), и если это не удается, попробуйте попытаться проанализировать его как файл / путь.

Ответ №1:

Если вы хотите использовать эти URI файлы, например, в File конструкторе, вам необходимо указать base URI для относительных путей. Вы можете сделать это с помощью URI.resolve .

 URI basePath = new URI("file:///base_dir/");
URI uri = basePath.resolve("foo.txt");

System.out.println(new File(uri));
 

Комментарии:

1. Спасибо. Я пытался использовать URI.resolve , но я перепутал аргумент this / .

Ответ №2:

Используйте URI, а не URL.

Однако это может быть или не быть тем, что вы на самом деле хотите, в зависимости от того, что вам нужно сделать с результатом.

Ответ №3:

Вы можете создать URI для каждого из ресурсов, которые вы указали, следующим образом:

 public class T {

    public static void main(final String[] args) throws URISyntaxException {
        System.out.println(new URI("test.xml"));
        System.out.println(new URI("./test.xml"));
        System.out.println(new URI("../test.xml"));
        System.out.println(new URI("/etc/test.xml"));
        System.out.println(new URI("file:///etc/test.xml"));
        System.out.println(new URI("http://example.com/test.xml"));

    }

}
 

Кроме того, вы можете получить URL-адрес с помощью метода «toURL ()», но это только в случае, если URI является абсолютным.