Creating a URL
The easiest way to create a URL object is from a String that represents the human-readable form of the URL address. This is typically the form that another person will use for a URL. In your Java program, you can use a String containing this text to create a URL object:
The URL object created above represents an absolute URL. An absolute URL contains all of the information necessary to reach the resource in question. You can also create URL objects from a relative URL address.
Creating a URL Relative to Another
A relative URL contains only enough information to reach the resource relative to (or in the context of) another URL.
Relative URL specifications are often used within HTML files. For example, suppose you write an HTML file called JoesHomePage.html . Within this page, are links to other pages, PicturesOfMe.html and MyKids.html , that are on the same machine and in the same directory as JoesHomePage.html . The links to PicturesOfMe.html and MyKids.html from JoesHomePage.html could be specified just as file names, like this:
These URL addresses are relative URLs. That is, the URLs are specified relative to the file in which they are contained — JoesHomePage.html .
In your Java programs, you can create a URL object from a relative URL specification. For example, suppose you know two URLs at the site example.com :
You can create URL objects for these pages relative to their common base URL: http://example.com/pages/ like this:
This code snippet uses the URL constructor that lets you create a URL object from another URL object (the base) and a relative URL specification. The general form of this constructor is:
The first argument is a URL object that specifies the base of the new URL . The second argument is a String that specifies the rest of the resource name relative to the base. If baseURL is null, then this constructor treats relativeURL like an absolute URL specification. Conversely, if relativeURL is an absolute URL specification, then the constructor ignores baseURL .
This constructor is also useful for creating URL objects for named anchors (also called references) within a file. For example, suppose the page1.html file has a named anchor called BOTTOM at the bottom of the file. You can use the relative URL constructor to create a URL object for it like this:
Other URL Constructors
The URL class provides two additional constructors for creating a URL object. These constructors are useful when you are working with URLs, such as HTTP URLs, that have host name, filename, port number, and reference components in the resource name portion of the URL. These two constructors are useful when you do not have a String containing the complete URL specification, but you do know various components of the URL.
For example, suppose you design a network browsing panel similar to a file browsing panel that allows users to choose the protocol, host name, port number, and filename. You can construct a URL from the panel's components. The first constructor creates a URL object from a protocol, host name, and filename. The following code snippet creates a URL to the page1.html file at the example.com site:
This is equivalent to
The first argument is the protocol, the second is the host name, and the last is the pathname of the file. Note that the filename contains a forward slash at the beginning. This indicates that the filename is specified from the root of the host.
The final URL constructor adds the port number to the list of arguments used in the previous constructor:
This creates a URL object for the following URL:
If you construct a URL object using one of these constructors, you can get a String containing the complete URL address by using the URL object's toString method or the equivalent toExternalForm method.
URL addresses with Special characters
Some URL addresses contain special characters, for example the space character. Like this:
To make these characters legal they need to be encoded before passing them to the URL constructor.
Encoding the special character(s) in this example is easy as there is only one character that needs encoding, but for URL addresses that have several of these characters or if you are unsure when writing your code what URL addresses you will need to access, you can use the multi-argument constructors of the java.net.URI class to automatically take care of the encoding for you.
And then convert the URI to a URL.
MalformedURLException
Each of the four URL constructors throws a MalformedURLException if the arguments to the constructor refer to a null or unknown protocol. Typically, you want to catch and handle this exception by embedding your URL constructor statements in a try / catch pair, like this:
See Exceptions for information about handling exceptions.
URL s are "write-once" objects. Once you've created a URL object, you cannot change any of its attributes (protocol, host name, filename, or port number).
Как создать свою ссылку java на компьютере
public class Solution
public static void main(String[] args)
Person = new Person;
Person = Person
>
public static class Person
String name = «Al»;
int age = 3;
int weight = 2;
int money = 1;
>
>
.
public static class Person
public static class Person
String name;
int age;
int weight;
int money;
public class Solution
public static void main(String[] args)
Person person = new Person();
>
public static class Person
String name = («aes»);
int age = 1;
int weight = 2;
int money = 3;
>
>
Руководство по URL-адресу Java
URL – адрес-это ссылка или адрес на ресурс в сети. Проще говоря, Java-код, передаваемый по сети, может использовать java.net.URL класс для представления адресов ресурсов.
Платформа Java поставляется со встроенной сетевой поддержкой, включенной в java.net пакет:
2. Создание URL-адреса
Давайте сначала создадим java.net.URL объект, используя его конструктор и передавая строку, представляющую читаемый человеком адрес ресурса:
Мы только что создали абсолютный URL-объект . Адрес содержит все части, необходимые для достижения желаемого ресурса.
Мы также можем создать относительный URL-адрес ; предполагая, что у нас есть объект URL, представляющий домашнюю страницу Baeldung:
Затем давайте создадим новый URL-адрес, указывающий на ресурс, который мы уже знаем; мы собираемся использовать другой конструктор, который принимает как существующий URL-адрес, так и имя ресурса относительно этого URL-адреса:
Теперь мы создали новый объект URL url относительно home ; таким образом, относительный URL действителен только в контексте базового URL.
Мы можем увидеть это в тесте:
Однако если относительный URL-адрес обнаружен как абсолютный в его составных частях, то baseUrl игнорируется:
Наконец, мы можем создать URL-адрес, вызвав другой конструктор, который принимает составные части строки URL-адреса. Мы рассмотрим это в следующем разделе после того, как рассмотрим компоненты URL.
3. Компоненты URL
URL – адрес состоит из нескольких компонентов, которые мы рассмотрим в этом разделе.
Давайте сначала рассмотрим разделение между идентификатором протокола и ресурсом – эти два компонента разделяются двоеточием, за которым следуют две косые черты, т. е. ://.
Если у нас есть URL-адрес, например http://baeldung.com тогда часть перед разделителем, http, является идентификатором протокола, а следующая-именем ресурса, baeldung.com .
Давайте посмотрим на API, который предоставляет объект URL .
3.1. Протокол
Для получения протокола – мы используем метод getProtocol() :
3.2. Порт
Чтобы получить порт – мы используем метод getPort() :
Обратите внимание, что этот метод извлекает явно определенный порт. Если порт не определен явно, он вернет значение -1.
И поскольку HTTP – связь по умолчанию использует порт 80-порт не определен.
Вот пример, где у нас есть явно определенный порт:
3.3. Хозяин
Хост – это часть имени ресурса, которая начинается сразу после разделителя :// и заканчивается расширением доменного имени, в нашем случае .com .
Мы вызываем метод getHost() для получения имени хоста:
3.4. Имя Файла
Все, что следует за именем хоста в URL-адресе, называется именем файла ресурса . Он может включать в себя как путь, так и параметры запроса или просто имя файла:
Предполагая, что у Baeldung есть статьи java 8 под URL /articles?topic=java&version=8 . Все, что после имени хоста, – это имя файла:
3.5. Параметры пути
Мы также можем проверять только путь параметры, которые в нашем случае являются /статьями :
3.6. Параметры запроса
Аналогично, мы можем проверить параметры запроса , которые являются topic=java&version=8 :
4. Создание URL-Адреса С Компонентами
Поскольку теперь мы рассмотрели различные компоненты URL и их место в формировании полного адреса ресурса, мы можем рассмотреть другой метод создания объекта URL путем передачи компонентов.
Первый конструктор принимает протокол, имя хоста и имя файла соответственно:
Имейте в виду значение имени файла в этом контексте, следующий тест должен сделать его более ясным:
Второй конструктор принимает протокол, имя хоста, номер порта и имя файла соответственно:
5. Заключение
В этом уроке мы рассмотрели класс URL и показали, как использовать его в Java для программного доступа к сетевым ресурсам.
Как всегда, полный исходный код статьи и все фрагменты кода можно найти в проекте GitHub .
Работа с сетью
Работу с потоками ввода-вывода мы уже изучили, работу с файлами изучили, что же изучить дальше? А как насчет работы с сетью и интернетом? Звучит многообещающе, не так ли?
В Java работать с интернетом не сложнее, чем работать с файлами. Ну разве что совсем чуть-чуть.
Для работы с ресурсами в интернете в Java есть специальный класс — URL . Он простой, как табуретка, в чем вы сейчас и убедитесь.
Получение странички из интернета
Как вы думаете, сколько строк кода нужно написать, чтобы скачать какой-нибудь текстовый файл из интернета и отобразить его содержимое на экране? 10? 100? 1000? А может быть, 5?
| Код | Примечание |
|---|---|
| Создает объект URL с путем к странице Получает InputStream у интернет-объекта Читает все байты и возвращает массив байт Преобразуем массив в строку Выводим строку на экран |
На экране отобразится содержимое HTML-файла:
| Вывод на экран |
|---|
2. Класс URLConnection
Кроме простого чтения данных из интернета, мы еще можем и загружать туда данные. Загрузка данных — это куда более сложный процесс, чем считывание. Вам понадобится на несколько методов больше. Пример:
Получаем поток вывода
Выводим в него данные
Обратите внимание, что тут мы больше не вызываем метод url.openStream() . Вместо этого мы идем по более длинному пути:
- Сначала мы устанавливаем стабильное двустороннее соединение с помощью метода URLConnection openConnection()
- Затем получаем поток для отправки данных с помощью метода connection.getOutputStream() и отправляем данные серверу
- Затем получаем поток для чтения данных с помощью метода connection.getInputStream() и начинаем читать из него данные.
Контроль ресурсов
Строго говоря, мы должны все потоки обернуть в try -with-resources для безопасной работы. А еще не помешало бы обернуть голые InputStream и OutputStream во что-нибудь более удобное. Например, в PrintStream и BufferedReader .
Если мы все это сделаем, наш код будет выглядеть как-то так:
3. Примеры работы с сетью
А давай-ка мы что-нибудь загрузим из интернета. И не просто загрузим, а сохраним на диск.
Например, давайте напишем программу, которая сохраняет на диск картинку с главной страницы Google.
В принципе ничего сложного. В самой простой интерпретации этот код будет выглядеть так:
| Сохранение файла на диск |
|---|
С помощью трех первых строк мы получаем поток данных от интернет-ресурса — от картинки.
В четвертой строке мы создаем имя файла, в который будем сохранять картинку. Имя может быть любым, однако расширение файла должно совпадать с расширением картинки в интернете. Так локальные программы просмотра картинок будут правильно ее открывать.
Ну и наконец, последняя строка — это один из методов copy класса Files . У класса Files их несколько. Этот метод, который мы использовали, принимает в качестве первого параметра источник данных — байтовый поток ( InputStream ), а в качестве второго параметра — имя файла, куда нужно записывать данные.
Теоретически, если бы URL картинки был коротким, этот код вообще можно было бы записать в одну строку:
| Копирование данных из потока в файл |
|---|
Писать так, конечно же, не нужно , однако этот пример демонстрирует, насколько удобные и мощные в Java потоки ввода-вывода.