undefined

Download file

Java Collections
10 уровень , 3 лекция
Открыта

— Привет, Амиго!

— Привет, Элли!

— Что-то ты сегодня сильно довольный.

— Ха, Билаабо заболел.

— И не смог тебе рассказать кучу интересного, полезного и нужного. Пора бы уже вырасти из детских штанишек.

— Угу. Я обещаю сам во всем разобраться. Билаабо дал мне ссылку.

— Вот и отлично. Тогда я расскажу тебе интересную тему.

Как скачать файл из интернета.

Для того, чтобы работать с интернетом в Java есть специальный класс – URL. Вот как скачать файл при помощи этого класса:

1) Для начала надо задать правильный URL нужного тебе сервера.

2) Затем нужно установить соединение с сервером, с помощью этого URL.

3) Затем передать тело запроса, если это POST-запрос. Или пропустить этот шаг, если это GET-запрос.

4) И наконец, прочитать ответ сервера.

Вот как будет выглядеть простое скачивание файла:

Пример
URL url = new URL("https://www.google.com.ua/images/srpr/logo11w.png");
URLConnection connection = url.openConnection(); //устанавливаем соединение

//получаем OutputStream, чтобы писать в него данные запроса
OutputStream outputStream = connection.getOutputStream();
outputStream.write(1);
outputStream.flush();

//получаем InputStream, чтобы читать из него данные ответа
InputStream inputStream = connection.getInputStream();
Files.copy(inputStream, new File("c:/google.png").toPath());

Сначала устанавливаем соединение с сервером – получаем объект URLConnection.

Затем получаем  OutputStream потока, куда нужно писать запрос. И что-то туда пишем.

Затем получаем объект  InputStream ответа, из которого и читаем сам ответ. С помощью метода Files.copy сохраняем присланные данные в файл «c:/google.png»

— Да, это понятно. А что еще за write(1)?

— Ну, это я для примера показала, что туда можно что-то писать. На самом деле, для скачивания файла ничего в Request писать не надо. Можно просто сразу получать InputStreamи начинать читать оттуда ответ. У объекта URL есть даже метод openStream(), который сразу возвращает объект InputStream. Но это годится только для GET-запросов. Пример:

Пример
URL url = new URL("https://www.google.com.ua/images/srpr/logo11w.png");
InputStream inputStream = url.openStream();
Files.copy(inputStream, new File("c:/google.png").toPath());

— Как интересно. Не думал, что скачать файл так просто.

— Ну, так обычно никто не делает. Т.к. файлы могут быть большими и скачиваться очень долго.

Есть достаточно много фреймворков, который значительно упрощают работу с файлами, но я не готова сейчас про них рассказать. Как-нибудь в другой раз.

Комментарии (10)
Чтобы просмотреть все комментарии или оставить свой,
перейдите в полную версию
Алексей 41 уровень, Чебоксары
13 февраля 2021
Если код из примеров выбрасывает исключения, попробуйте сохранить файл google.png на другой локальный диск.
Артур Харатян 41 уровень, Санкт-Петербург
26 января 2021
Попробовал скачать, по первому способу выдает ProtocolException, по второму выдает AccessDeniedException.
Mark Cain 41 уровень, Львов
11 ноября 2020
"...получаем OutputStream потока, куда нужно писать запрос. И что-то туда пишем. ... На самом деле, для скачивания файла ничего в Request писать не надо." - хм...
Андрей 0 уровень
29 мая 2020
Не подскажите, сколько таким способом будет скачиваться .apk размером около 10 Мб?
Дворник 41 уровень, Санкт-Петербург
4 апреля 2020
А когда Spring?
Александр 41 уровень, Москва Expert
9 ноября 2019
Почему? ну почему я каждый раз покупаюсь на это вот "Как-нибудь в другой раз."? Ну ничему жизнь не учит...
King 41 уровень, Санкт-Петербург
20 апреля 2019
Единственное, что доставляет на 40 уровне, это циничные комменты под лекциями))
Андрей Кондрашов 40 уровень, Казань
21 декабря 2017
Как -нибудь никогда. Никогда тебя устроит?