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());

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

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

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

Комментарии (26)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Denis Odesskiy Уровень 46
9 июня 2025
— Как интересно. ... так просто. — Ну, так обычно никто не делает. ... ...но я не готова сейчас про них рассказать. Как-нибудь в другой раз. ... )) Итог лекции зачётный, поржал.
Макс Дудин Уровень 41
6 сентября 2022
(уже было?) да пофиг, повторение мать учения...
Ilia lenskii Уровень 32
23 сентября 2022
... в Симпсонах...
FatCat Уровень 51
3 октября 2022
как и всё что будет)))
Igor Petrashevsky Уровень 47
30 августа 2022
это было в первых квестах в задачках. что дальше? сокеты?
Ilia lenskii Уровень 32
23 сентября 2022
> что дальше? Рекурсия Только единицы из миллиона поймут...
Anemon Уровень 51 Expert
11 мая 2025
Жизненно Для интеллектуалов, не многие вспомнят, но многие..
Рогов Игорь Уровень 17
2 июня 2022
за две лекции так и не увидел практического использования или вообще использования запростов GET, POST,PUT. только упоминания
Maks Panteleev Уровень 41
3 августа 2021
Как скачать файл из интернета. Ну да, именно ради этого я полгода учил джаву
LuneFox Уровень 41 Expert
29 марта 2022
В следующей серии: "Как отправить письмо через интернет?" А если серьёзно, для многих это может быть неочевидно, потому что речь идёт от технической стороне вопроса :) И это не просто "вбей ссылку и нажми на сохранить".
Andrey Panchenko Уровень 26
26 апреля 2022
Вообще часто в приложениях приходится реализовывать скачивание файлов по ссылке. Если в браузере всё на блюдечке преподнесено, то в собственных приложениях придётся самому делать.
Anna Avilova Уровень 51
27 апреля 2022
аааа ))))

В следующей серии: "Как отправить письмо через интернет?"
я была уверена, что это стеб )... в смысле, сарказм
Maks Panteleev Уровень 41
27 апреля 2022
да это понятно, но в целом просто смешно)
Алексей Уровень 41
13 февраля 2021
Если код из примеров выбрасывает исключения, попробуйте сохранить файл google.png на другой локальный диск.
Уровень 1
26 января 2021
Попробовал скачать, по первому способу выдает ProtocolException, по второму выдает AccessDeniedException.
Mark Cain Уровень 41
11 ноября 2020
"...получаем OutputStream потока, куда нужно писать запрос. И что-то туда пишем. ... На самом деле, для скачивания файла ничего в Request писать не надо." - хм...
Андрей Уровень 0
29 мая 2020
Не подскажите, сколько таким способом будет скачиваться .apk размером около 10 Мб?
LuneFox Уровень 41 Expert
29 марта 2022
При скорости подключения 10 Мб/сек - одну секунду.
Дворник Уровень 41
4 апреля 2020
А когда Spring?
LuneFox Уровень 41 Expert
29 марта 2022
В первом комментарии ответ :)