Назад
Вперед
8.2. Работа с классом URL
Пример показывает способы применения класса URL
для просмотра компонент адреса URL локального или
удаленного узла.
Исходный текст примера
Архив проекта для Java WorkShop 2.0
Немного теории
Для работы с ресурсами, заданными адресами URL, в
библиотеке классов Java имеется очень удобный и
мощный класс с названием URL.
С помощью определенных в нем конструкторов и
методов нетрудно извлечь и проверить отдельные
компоненты адреса: протокол, адрес узла, номер
порта, имя файла. Вы также можете открыть поток,
связанный с ресурсом и прочитать его для
отображения, обработки или для копирования в
другой поток.
Расскажем кратко о классе URL.
Конструкторы класса URL
В этом классе предусмотрено четыре
конструктора.
Первый из них создает объект URL для сетевого
ресурса, адрес URL которого передается в виде
текстовой строки через единственный параметр spec:
public URL(String spec);
В процессе создания объекта проверяется
заданный адрес URL.. Если адрес указан неверно,
возникает исключение MalformedURLException. Это же
исключение возникает при попытке использовать
протокол, с которым данная система не может
работать.
Второй вариант конструктора класса URL
допускает раздельное указание протокола, адреса
узла, номера порта, а также имя файла:
public URL(String protocol,
String host, int port, String file);
Третий вариант предполагает использование
номера порта, принятого по умолчанию:
public URL(String protocol,
String host, String file);
Для протокола HTTP, например, это порт с номером 80.
И, наконец, четвертый вариант конструктора
допускает указание контекста адреса URL и строки
адреса URL:
public URL(URL context, String spec);
Строка контекста позволяет указывать
компоненты адреса URL, отсутствующие в строке spec,
такие как протокол, имя узла, файла или номер
порта.
Методы класса URL
Кратко рассмотрим самые интересные методы,
определенные в классе URL.
Метод openStream позволяет создать входной поток
для чтения файла ресурса, связанного с созданным
объектом класса URL:
public final InputStream openStream();
Для выполнения операции чтения из созданного
таким образом потока вы можете использовать
метод read, определенный в классе InputStream.
С помощью метода getHost вы можете определить имя
узла, соответствующего данному объекту URL:
public String getHost();
Метод getFile позволяет получить имя файла,
связанного с данным объектом URL:
public String getFile();
Метод getPortt предназначен для определения номера
порта, на котором выполняется связь для объекта
URL:
public int getPort();
С помощью метода getProtocol вы можете определить
протокол, с использованием которого установлено
соединение с ресурсом, заданным объектом URL:
public String getProtocol();
Метод getRef возвращает текстовую строку ссылки
на ресурс, соответствующий данному объекту URL:
public String getRef();
Метод hashCode возвращает хэш-код объекта URL:
public int hashCode();
Вы можете использовать метод equals для
определения идентичности адресов URL, заданных
двумя объектами класса URL:
public boolean equals(Object obj);
Если адреса URL идентичны, метод equals возвращает
значение true, если нет - значение false.
Метод toExternalForm возвращает текстовую строку
внешнего представления адреса URL, определенного
данным объектом класса URL:
public String toExternalForm();
Метод toString возвращает текстовую строку,
представляющую данный объект класса URL:
public String toString();
Метод openConnection
Метод openConnection предназначен для создания канала
между приложением и сетевым ресурсом,
представленным объектом класса URL:
public URLConnection openConnection();
Описание примера
Наше автономное приложение запрашивает в цикле
с консоли адреса URL, разбирает их на составляющие
компоненты и отображает результат.
Вот что получится, например, если ввести адрес
http://frolov:80/test/text.txt:
Enter URL-address ('quit' to exit):
http://frolov:80/test/text.txt
URL Address: http://frolov:80/test/text.txt
Host: frolov
Port: 80
Protocol: http
Filename: /test/text.txt
Reference: null
External Form: http://frolov:80/test/text.txt
Enter URL-address ('quit' to exit):
Этот адрес включает в себя название протокола
(HTTP), доменное имя узла (frolov), номер порта (80), путь
файлу и его имя (/test/text.txt).
Если ввести адрес документа, содержащий
локальную ссылку, наша программа выделит и
отобразит ее в поле Reference:
Enter URL-address ('quit' to exit):
http://frolov/index.htm#main
URL Address: http://frolov/index.htm#main
Host: frolov
Port: -1
Protocol: http
Filename: /index.htm
Reference: main
External Form: http://frolov/index.htm#main
Enter URL-address ('quit' to exit):
Вы можете ввести также адрес с протоколом FTP.
Вот что получится, если ввести адрес
ftp://frolov/mytexts/text.txt:
Enter URL-address ('quit' to exit):
ftp://frolov/test/mytexts/qq.txt
URL Address: ftp://frolov/test/mytexts/qq.txt
Host: frolov
Port: -1
Protocol: ftp
Filename: /test/mytexts/qq.txt
Reference: null
External Form: ftp://frolov/test/mytexts/qq.txt
Enter URL-address ('quit' to exit):
При попытке ввести адрес с неизвестным
протоколом возникнет исключение MalformedURLException:
Enter URL-address ('quit' to exit):
ttt://test/t.txt
java.net.MalformedURLException:
unknown protocol: ttt
Enter URL-address ('quit' to exit):
Рассмотрим исходный текст приложения.
Метод main
Сразу после запуска метод main приступает к
выполнению цикла ввода адресов URL:
String s;
URL u;
while(true)
{
System.out.println(
"Enter URL-address ('quit' to exit): ");
s = new String(getKbdString());
if(s.equals("quit"))
break;
. . .
}
В цикле метод создает для введенных адресов
объекты класса URL и передает их методу
printURLAddresssInfo:
try
{
u = new URL(s);
}
catch(MalformedURLException ex)
{
System.out.println(ex.toString());
continue;
}
printURLAddresssInfo(u);
Этот метод выводит на консоль информацию о
компонентах объекта класса URL.
Метод printURLAddresssInfo
Метод printURLAddresssInfo выводит на консоль текстовое
представление объекта URL и его отдельных
компонент, извлеченных соответствующими
методами класса URL:
System.out.println("URL Address: " + u);
System.out.println("Host: " + u.getHost());
System.out.println("Port: " + u.getPort());
System.out.println(
"Protocol: " + u.getProtocol());
System.out.println(
"Filename: " + u.getFile());
System.out.println(
"Reference: " + u.getRef());
System.out.println(
"External Form: " + u.toExternalForm());
Назад Вперед |