#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 является абсолютным.