Дополнительно
Как загрузить и сохранить файл из Интернета с помощью Java?
Есть онлайн-файл (например, http://www.example.com/information.asp
), который мне нужно захватить и сохранить в каталоге. Я знаю, что существует несколько методов захвата и чтения онлайновых файлов (URL) построчно, но есть ли способ просто загрузить и сохранить файл с помощью Java?
416
20
Попробуйте Java NIO:
Использование
transferFrom()
потенциально гораздо более эффективно, чем простой цикл, который читает из исходного канала и записывает в этот канал. Многие операционные системы могут передавать байты непосредственно из исходного канала в кэш файловой системы без их фактического копирования.Подробнее об этом здесь.
Примечание: Третий параметр в transferFrom - это максимальное количество байт для передачи.
Integer.MAX_VALUE
передаст максимум 2^31 байт,Long.MAX_VALUE
- максимум 2^63 байта (больше, чем любой существующий файл).Использование Apache Коммонс-Ио, всего одну строку кода:
Простое использование НИО:
Вам потребуется обрабатывать исключения, возможно, внешние по отношению к этому методу.
Загрузка файла требует его чтения, в любом случае вам придется каким-то образом пройтись по файлу. Вместо того чтобы читать файл построчно, вы можете просто читать его по байтам из потока:
Это'ы старый вопрос, но вот краткий, четкий, с JDK решение только с правильно закрытым ресурсам:
Две строчки кода и никаких зависимостей.
При использовании
используете Java 7+
Следующий метод для того, чтобы скачать файл из интернета и сохранить его в какую-нибудь папку:Документацию здесь.
Этот ответ почти такой же как у выбранного ответа, но с двумя усовершенствования: он'ы метод и он закрывает объект поток:
Лично я'вэ нашел Апач'ы с помощью HttpClient более чем способны, что я'вэ нужно делать с учетом этого. Здесь - отличный учебник по С помощью HttpClient
Это еще один java7 вариант на основе Брайан риск'ы ответ с использованием попробовать с заявлением:
Есть много элегантных и эффективные ответы здесь. Но лаконичность может заставить нас потерять некоторую полезную информацию. В частности, один часто не хочет учитывать ошибки подключения исключение, и один, возможно, захотите, чтобы обработать по-разному какие-то ошибки, связанные с сетью, например, чтобы решить, если мы должны повторить загрузку.
Здесь'ы метод, который не бросает исключений для ошибок сети (только для действительно исключительных проблем, как неправильный URL или проблемы с записью в файл)
Есть способ У. метод fetch(URL) в подчеркивание-Ява библиотека.
pom.xml:
Пример кода:
Подводя итог (и почему-то польские и обновления) предыдущие ответы. Три следующие методы практически эквивалентны. (Я добавил явные перерывы, потому что я думаю, что они должны, никто не хочет скачать, чтобы заморозить навсегда, когда соединение потеряно.)
Я Дон'т найти существенные различия, все казалось мне правильным. Они являются безопасными и эффективными. (Разница в скорости вряд ли уместны - я пишу 180 МБ с локального сервера на SSD диск в разы, что колебаться в районе 1,2 до 1,5 сегментов). Они Дон'т требует внешних библиотек. Все работы с произвольными размерами и (по моему опыту) перенаправление протокола HTTP.
Кроме того, все бросать исключение filenotfoundexception
если ресурс не найден (404 ошибка, как правило), и Ява.чистая.UnknownHostException
если разрешение DNS провалился; другой исключительной ситуации IOException соответствуют ошибок во время передачи.(Отмечен как сообщество Вики, не стесняйтесь, дополнения и поправки)
Это's возможные для того, чтобы скачать файл с Apache'HttpComponents ы `
вместо
Коммонс-ИО`. Этот код позволяет загрузить файл в Java по URL и сохранить его в определенный пункт назначения.В отличие от одной строки кода:
этот код даст вам больше контроля над процессом и позволяют определить не только ауты, но "пользователь-агент" и "реферер" ценности, которые являются критическими для многих веб-сайтов.
Есть проблема с простого использования:
если вам нужно скачать и сохранить очень большие файлы, или вообще если вам нужны автоматические повторы в случае, если соединение обрывается.
То, что я предлагаю в таких случаях является Apache HttpClient, который вместе с орг."Апач".общин.Ио.Пакета fileutils. Например:
Ниже приведен пример кода для загрузки видео из интернета с Java-кодом:
Если вы находитесь за прокси-сервером, можно настроить прокси в программу Java, как показано ниже:
Если вы не используете прокси-сервер, Дон'т включать вышеуказанные строки в ваш код. Полный рабочий код для загрузки файла, когда вы находитесь за прокси.
Вы можете сделать это в 1 строку, используя netloader для Java: