Класс URI
Класс URI из пакета java.net представляет собой неизменяемое (immutable) представление универсального идентификатора ресурса. URI может быть абсолютным или относительным. Абсолютный URI содержит схему (например, http, ftp, file) и идентифицирует ресурс независимо от контекста. Относительный URI не содержит схемы и должен интерпретироваться относительно другого URI. Класс предоставляет методы для получения отдельных компонентов: схемы, хоста, порта, пути, запроса и фрагмента. Конструкторы класса могут выбрасывать URISyntaxException, если переданная строка нарушает синтаксис URI. В отличие от класса URL, класс URI не выполняет никаких сетевых операций и не пытается подключиться к ресурсу, что делает его безопасным для разбора и валидации адресов.
Синтаксис
URI uri = new URI("scheme://host:port/path?query#fragment");
// или
URI uri = URI.create("scheme://host:port/path?query#fragment");
Пример
Давайте создадим абсолютный URI и выведем его компоненты на экран:
import java.net.URI;
public class Main
{
public static void main(String[] args) throws Exception
{
URI uri = new URI("https://example.com:8080/api/data?page=1#top");
System.out.println("Scheme: " + uri.getScheme());
System.out.println("Host: " + uri.getHost());
System.out.println("Port: " + uri.getPort());
System.out.println("Path: " + uri.getPath());
System.out.println("Query: " + uri.getQuery());
System.out.println("Fragment: " + uri.getFragment());
}
}
Результат выполнения кода:
"Scheme: https"
"Host: example.com"
"Port: 8080"
"Path: /api/data"
"Query: page=1"
"Fragment: top"
Пример
Давайте создадим относительный URI и разрешим его относительно базового абсолютного URI:
import java.net.URI;
public class Main
{
public static void main(String[] args) throws Exception
{
URI base = new URI("https://example.com/api/v1/");
URI relative = new URI("users/123");
URI res = base.resolve(relative);
System.out.println(res);
}
}
Результат выполнения кода:
"https://example.com/api/v1/users/123"
Пример
Давайте вычислим относительный путь между двумя URI с помощью метода relativize:
import java.net.URI;
public class Main
{
public static void main(String[] args) throws Exception
{
URI base = new URI("https://example.com/api/v1/");
URI other = new URI("https://example.com/api/v1/users/123");
URI res = base.relativize(other);
System.out.println(res);
}
}
Результат выполнения кода:
"users/123"