Download file

Открыта

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

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

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

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

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

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

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

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

Для того, чтобы работать с интернетом в 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 Full Stack Developer
9 июня 2025, 14:22
— Как интересно. ... так просто. — Ну, так обычно никто не делает. ... ...но я не готова сейчас про них рассказать. Как-нибудь в другой раз. ... )) Итог лекции зачётный, поржал.
Макс Дудин
Уровень 41
6 сентября 2022, 10:57
(уже было?) да пофиг, повторение мать учения...
Ilia lenskii
Уровень 32
23 сентября 2022, 21:44
... в Симпсонах...
FatCat Backend Developer
3 октября 2022, 16:28
как и всё что будет)))
Igor Petrashevsky
Уровень 47
30 августа 2022, 22:15
это было в первых квестах в задачках. что дальше? сокеты?
Ilia lenskii
Уровень 32
23 сентября 2022, 21:46
> что дальше? Рекурсия Только единицы из миллиона поймут...
Anemon
Уровень 13
Expert
11 мая 2025, 21:06
Жизненно Для интеллектуалов, не многие вспомнят, но многие..
Рогов Игорь
Уровень 17
2 июня 2022, 08:47
за две лекции так и не увидел практического использования или вообще использования запростов GET, POST,PUT. только упоминания
Maks PanteleevJava Developer в Bell Integrator
3 августа 2021, 08:30
Как скачать файл из интернета. Ну да, именно ради этого я полгода учил джаву
LuneFoxJava Developer в BIFITExpert
29 марта 2022, 17:08
В следующей серии: "Как отправить письмо через интернет?" А если серьёзно, для многих это может быть неочевидно, потому что речь идёт от технической стороне вопроса :) И это не просто "вбей ссылку и нажми на сохранить".
Andrey PanchenkoМоет полы в Яндекс
26 апреля 2022, 14:02
Вообще часто в приложениях приходится реализовывать скачивание файлов по ссылке. Если в браузере всё на блюдечке преподнесено, то в собственных приложениях придётся самому делать.
Anna Avilova architect
27 апреля 2022, 14:55
аааа ))))
В следующей серии: "Как отправить письмо через интернет?"
я была уверена, что это стеб )... в смысле, сарказм
Maks PanteleevJava Developer в Bell Integrator
27 апреля 2022, 18:22
да это понятно, но в целом просто смешно)
Алексей
Уровень 41
13 февраля 2021, 21:03
Если код из примеров выбрасывает исключения, попробуйте сохранить файл google.png на другой локальный диск.
Java Developer
26 января 2021, 08:37
Попробовал скачать, по первому способу выдает ProtocolException, по второму выдает AccessDeniedException.
Mark Cain
Уровень 6
11 ноября 2020, 10:43
"...получаем OutputStream потока, куда нужно писать запрос. И что-то туда пишем. ... На самом деле, для скачивания файла ничего в Request писать не надо." - хм...
Андрей
Уровень 0
29 мая 2020, 12:23
Не подскажите, сколько таким способом будет скачиваться .apk размером около 10 Мб?
LuneFoxJava Developer в BIFITExpert
29 марта 2022, 17:09
При скорости подключения 10 Мб/сек - одну секунду.
Дворник
Уровень 41
4 апреля 2020, 15:58
А когда Spring?
LuneFoxJava Developer в BIFITExpert
29 марта 2022, 17:11
В первом комментарии ответ :)