Як завантажити та зберегти файл з Інтернету за допомогою Java?


425

Є інтернет-файл (наприклад http://www.example.com/information.asp), мені потрібно схопити і зберегти в каталозі. Я знаю, що існує кілька методів захоплення та читання онлайн-файлів (URL-адрес) по черзі, але чи є спосіб просто завантажити та зберегти файл за допомогою Java?


Відповіді:


559

Спробуйте Java NIO :

URL website = new URL("http://www.website.com/information.asp");
ReadableByteChannel rbc = Channels.newChannel(website.openStream());
FileOutputStream fos = new FileOutputStream("information.html");
fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);

Використання transferFrom()є потенційно набагато більш ефективним , ніж простий цикл , який зчитує дані з каналу джерела і записує на цей канал. Багато операційних систем можуть переносити байти безпосередньо з вихідного каналу в кеш файлової системи, фактично не копіюючи їх.

Більше про це дивіться тут .

Примітка . Третій параметр transferFrom - це максимальна кількість байтів для передачі. Integer.MAX_VALUEпередасть щонайбільше 2 ^ 31 байт, Long.MAX_VALUEдозволить не більше 2 ^ 63 байт (більше, ніж будь-який файл, який існує).


22
Закрийте усі три за допомогою Java 7 try-with-resource: try (InputStream inputStream = website.openStream (); ReadableByteChannel читабельнийByteChannel = Channels.newChannel (inputStream); FileOutputStream fileOutputStream = новий FileOutputStream (outputFileNameSame) (вихідFileNameCame) (вихідFileNameCame). (читабельнийByteChannel, 0, 1 << 24); }
mazatwork

80
Це завантажить лише перші 16 МБ файлу: stackoverflow.com/questions/8405062/downloading-files-with-java
Бен Маккан

31
@kirdie і якщо я хочу більше, ніж 8388608туберкульоз?
Cruncher

22
Один дзвінок не є адекватним. transferFrom()isnt 'вказано для завершення всієї передачі в одному дзвінку. Ось чому він повертає кількість. У вас є петля.
Маркіз Лорн

11
Чому цю відповідь навіть прийняли? URL::openStream()повертає просто звичайний потік, тобто весь трафік все ще копіюється через масиви Java byte [] замість того, щоб залишатися в нативних буферах. Тільки fos.getChannel()насправді це власний канал, тому накладні витрати залишаються повністю. Це нульові вигоди від використання NIO в цьому випадку. Крім зламаного, як правильно помітили EJP та Бен Макканн.
Ext3h

494

Використовуйте apache commons-io , лише один код рядка:

FileUtils.copyURLToFile(URL, File)

22
Приємно! Тільки те, що я шукаю! Я знав, що бібліотеки Apache вже покриють це. BTW, рекомендується використовувати перевантажену версію з параметрами тайм-ауту!
Хенді Іраван

6
... і використовуючи цю перевантажену версію, пам’ятайте, що час очікування вказано в мілісекундах, а не секундах.
László van den Hoek

5
Зверніть увагу, що copyURLToFileпараметр тайм-ауту доступний лише з версії 2.0 бібліотеки вводу-виводу Commons. Дивіться документи Java
Стенлі

6
що робити, якщо до запиту потрібно додати базовий заголовок аутентифікації? чи існує рішення?
даміан

3
Хоча це "коротко", насправді це дуже повільно.
Meinkraft

123

Простіше використання nio:

URL website = new URL("http://www.website.com/information.asp");
try (InputStream in = website.openStream()) {
    Files.copy(in, target, StandardCopyOption.REPLACE_EXISTING);
}

5
На жаль, це мовчки виходить з ладу (завантажує 0 байтів), якщо є переспрямування типу "302 знайдено".
Олександр К

1
@AlexanderK Але чому б ти взагалі сліпо завантажував такий ресурс?
xuesheng

5
Незважаючи на те, що це елегантне рішення, за лаштунками такий підхід міг мовчки зрадити вас. Files.copy (InputStream, Paths, FileOption) делегує процес копіювання Files.copy (InputStream, OutputStream). Цей останній метод не перевіряє кінець потоку (-1), але перевіряє відсутність читання байтів (0). Це означає, що якщо у вашій мережі була невелика пауза, вона могла прочитати 0 байт і закінчити процес копіювання, навіть якщо потік не закінчено завантажуватися в ОС.
Miere

6
@Miere InputStream.read()Повернути нуль неможливо, якщо ви не надали буфер нульової довжини або підрахунок, "маленька пауза" чи інше. Він блокується, поки щонайменше один байт не буде передано або закінчиться потоком або не з’явиться помилка. Ваші вимоги щодо внутрішніх справ Files.copy()безпідставні.
Маркіз Лорн

3
У мене є одиничний тест, який читає двійковий файл з 2.6TiB. Використовуючи Files.copy, він завжди виходить з ладу на моєму сервері зберігання жорстких дисків (XFS), але він не вдається лише в декілька разів мій SSH. Переглядаючи JDK 8 код File.copy, я виявив, що він перевіряє "> 0", щоб залишити цикл "while". Я просто скопіював абсолютно той самий код з -1, і обидва тести одиниці ніколи більше не припинялися. Як тільки InputStream може представляти мережеві та локальні дескриптори файлів, і обидві операції вводу-виводу підлягають переключенню в контексті ОС, я не можу зрозуміти, чому моя претензія є безпідставною. Можна стверджувати, що це працює від удачі, але це вже не дало головних болів.
Miere

85
public void saveUrl(final String filename, final String urlString)
        throws MalformedURLException, IOException {
    BufferedInputStream in = null;
    FileOutputStream fout = null;
    try {
        in = new BufferedInputStream(new URL(urlString).openStream());
        fout = new FileOutputStream(filename);

        final byte data[] = new byte[1024];
        int count;
        while ((count = in.read(data, 0, 1024)) != -1) {
            fout.write(data, 0, count);
        }
    } finally {
        if (in != null) {
            in.close();
        }
        if (fout != null) {
            fout.close();
        }
    }
}

Вам потрібно буде обробляти винятки, ймовірно, зовнішні для цього методу.


6
Як завантажити швидше? Як прискорювач завантаження?
digz6666

11
Якщо in.closeкидає виняток, fout.closeне називається.
Берилій

1
@ComFreek Це просто неправда. Використання a BufferedInputStreamмає точно нульовий ефект на час очікування розетки. Я вже спростував це як "міський міф" у своїх коментарях до "детальних відомостей", які ви цитували. На три роки раніше.
Маркіз Лорн

@EJP Дякую за виправлення! Я видалив свій коментар (для архіву: я пов’язав цю відповідь, заявивши, що BufferedInputStream"може спричинити непередбачувані збої").
ComFreek

+1 Моє єдине заперечення проти цієї відповіді (та інших тут) полягає в тому, що абонент не може відрізнити подію, "яку не знайдено", від якоїсь помилки підключення (на якій, можливо, ви захочете повторити спробу).
leonbloy

24

Це старе питання, але ось стисле, читабельне рішення, призначене лише для JDK, з належним чином закритими ресурсами:

public static void download(String url, String fileName) throws Exception {
    try (InputStream in = URI.create(url).toURL().openStream()) {
        Files.copy(in, Paths.get(fileName));
    }
}

Два рядки коду та відсутність залежностей.


Для людей, які цікавляться, ось імпорт, необхідний для цього фрагмента коду:import java.io.InputStream; import java.net.URI; import java.nio.file.Files; import java.nio.file.Paths;
BelovedFool

23

Завантаження файла вимагає, щоб ви його прочитали, в будь-якому випадку вам доведеться якось пройти через файл. Замість рядка за рядком ви можете просто прочитати його в байтах із потоку:

BufferedInputStream in = new BufferedInputStream(new URL("http://www.website.com/information.asp").openStream())
    byte data[] = new byte[1024];
    int count;
    while((count = in.read(data,0,1024)) != -1)
    {
        out.write(data, 0, count);
    }

17

Під час використання Java 7+використовуйте наступний метод для завантаження файлу з Інтернету та збереження його в якійсь папці:

private static Path download(String sourceURL, String targetDirectory) throws IOException
{
    URL url = new URL(sourceURL);
    String fileName = sourceURL.substring(sourceURL.lastIndexOf('/') + 1, sourceURL.length());
    Path targetPath = new File(targetDirectory + File.separator + fileName).toPath();
    Files.copy(url.openStream(), targetPath, StandardCopyOption.REPLACE_EXISTING);

    return targetPath;
}

Документація тут .


16

Ця відповідь майже точно нагадує вибрану відповідь, але з двома вдосконаленнями: це метод, і він закриває об'єкт FileOutputStream:

    public static void downloadFileFromURL(String urlString, File destination) {    
        try {
            URL website = new URL(urlString);
            ReadableByteChannel rbc;
            rbc = Channels.newChannel(website.openStream());
            FileOutputStream fos = new FileOutputStream(destination);
            fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
            fos.close();
            rbc.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

2
Один дзвінок не є адекватним. transferFrom()isnt 'вказано для завершення всієї передачі в одному дзвінку. Ось чому він повертає кількість. У вас є петля.
Маркіз Лорн

10
import java.io.*;
import java.net.*;

public class filedown {
    public static void download(String address, String localFileName) {
        OutputStream out = null;
        URLConnection conn = null;
        InputStream in = null;

        try {
            URL url = new URL(address);
            out = new BufferedOutputStream(new FileOutputStream(localFileName));
            conn = url.openConnection();
            in = conn.getInputStream();
            byte[] buffer = new byte[1024];

            int numRead;
            long numWritten = 0;

            while ((numRead = in.read(buffer)) != -1) {
                out.write(buffer, 0, numRead);
                numWritten += numRead;
            }

            System.out.println(localFileName + "\t" + numWritten);
        } 
        catch (Exception exception) { 
            exception.printStackTrace();
        } 
        finally {
            try {
                if (in != null) {
                    in.close();
                }
                if (out != null) {
                    out.close();
                }
            } 
            catch (IOException ioe) {
            }
        }
    }

    public static void download(String address) {
        int lastSlashIndex = address.lastIndexOf('/');
        if (lastSlashIndex >= 0 &&
        lastSlashIndex < address.length() - 1) {
            download(address, (new URL(address)).getFile());
        } 
        else {
            System.err.println("Could not figure out local file name for "+address);
        }
    }

    public static void main(String[] args) {
        for (int i = 0; i < args.length; i++) {
            download(args[i]);
        }
    }
}

5
Якщо in.closeкидає виняток, out.closeне називається.
Beryllium

8

Особисто я знайшов HttpClient Apache більш ніж здатним до всього, що мені потрібно зробити з цього приводу. Ось чудовий підручник з використання HttpClient


2
також commons-io є чудовою бібліотекою
dfa

6

Це ще один варіант java7, заснований на відповіді Брайана Риска з використанням твердження із спробою:

public static void downloadFileFromURL(String urlString, File destination) throws Throwable {

      URL website = new URL(urlString);
      try(
              ReadableByteChannel rbc = Channels.newChannel(website.openStream());
              FileOutputStream fos = new FileOutputStream(destination);  
              ){
          fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
      }

  }

Один дзвінок не є адекватним. transferFrom()isnt 'вказано для завершення всієї передачі в одному дзвінку. Ось чому він повертає кількість. У вас є петля.
Маркіз Лорн

Я не знаю, чому ви звертаєтесь до цього дурного питання до мене. Це не має нічого спільного з тим, що я сказав, і я дійсно відмовляюся від того, щоб слова були вкладені в рот.
Маркіз Лорн

2

Можна завантажити файл HttpComponentsзамість Apache Commons-IO. Цей код дозволяє завантажити файл на Java відповідно до його URL-адреси та зберегти його за певним пунктом призначення.

public static boolean saveFile(URL fileURL, String fileSavePath) {

    boolean isSucceed = true;

    CloseableHttpClient httpClient = HttpClients.createDefault();

    HttpGet httpGet = new HttpGet(fileURL.toString());
    httpGet.addHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0");
    httpGet.addHeader("Referer", "https://www.google.com");

    try {
        CloseableHttpResponse httpResponse = httpClient.execute(httpGet);
        HttpEntity fileEntity = httpResponse.getEntity();

        if (fileEntity != null) {
            FileUtils.copyInputStreamToFile(fileEntity.getContent(), new File(fileSavePath));
        }

    } catch (IOException e) {
        isSucceed = false;
    }

    httpGet.releaseConnection();

    return isSucceed;
}

На відміну від єдиного рядка коду:

FileUtils.copyURLToFile(fileURL, new File(fileSavePath),
                        URLS_FETCH_TIMEOUT, URLS_FETCH_TIMEOUT);

цей код надасть вам більше контролю над процесом і дозволить вам вказати не тільки тайм-аути, але User-Agentі Refererзначення, які є критичними для багатьох веб-сайтів.


2

Тут є багато елегантних та ефективних відповідей. Але стислість може змусити нас втратити корисну інформацію. Зокрема, часто не хочеться вважати помилку підключення винятком , а можна по-різному трактувати певні помилки, пов’язані з мережею - наприклад, вирішити, чи варто повторювати завантаження.

Ось метод, який не викидає винятки за мережеві помилки (лише для справді виняткових проблем, як неправильний URL або проблеми з записом у файл)

/**
 * Downloads from a (http/https) URL and saves to a file. 
 * Does not consider a connection error an Exception. Instead it returns:
 *  
 *    0=ok  
 *    1=connection interrupted, timeout (but something was read)
 *    2=not found (FileNotFoundException) (404) 
 *    3=server error (500...) 
 *    4=could not connect: connection timeout (no internet?) java.net.SocketTimeoutException
 *    5=could not connect: (server down?) java.net.ConnectException
 *    6=could not resolve host (bad host, or no internet - no dns)
 * 
 * @param file File to write. Parent directory will be created if necessary
 * @param url  http/https url to connect
 * @param secsConnectTimeout Seconds to wait for connection establishment
 * @param secsReadTimeout Read timeout in seconds - trasmission will abort if it freezes more than this 
 * @return See above
 * @throws IOException Only if URL is malformed or if could not create the file
 */
public static int saveUrl(final Path file, final URL url, 
  int secsConnectTimeout, int secsReadTimeout) throws IOException {
    Files.createDirectories(file.getParent()); // make sure parent dir exists , this can throw exception
    URLConnection conn = url.openConnection(); // can throw exception if bad url
    if( secsConnectTimeout > 0 ) conn.setConnectTimeout(secsConnectTimeout * 1000);
    if( secsReadTimeout > 0 ) conn.setReadTimeout(secsReadTimeout * 1000);
    int ret = 0;
    boolean somethingRead = false;
    try (InputStream is = conn.getInputStream()) {
        try (BufferedInputStream in = new BufferedInputStream(is); OutputStream fout = Files
                .newOutputStream(file)) {
            final byte data[] = new byte[8192];
            int count;
            while((count = in.read(data)) > 0) {
                somethingRead = true;
                fout.write(data, 0, count);
            }
        }
    } catch(java.io.IOException e) { 
        int httpcode = 999;
        try {
            httpcode = ((HttpURLConnection) conn).getResponseCode();
        } catch(Exception ee) {}
        if( somethingRead && e instanceof java.net.SocketTimeoutException ) ret = 1;
        else if( e instanceof FileNotFoundException && httpcode >= 400 && httpcode < 500 ) ret = 2; 
        else if( httpcode >= 400 && httpcode < 600 ) ret = 3; 
        else if( e instanceof java.net.SocketTimeoutException ) ret = 4; 
        else if( e instanceof java.net.ConnectException ) ret = 5; 
        else if( e instanceof java.net.UnknownHostException ) ret = 6;  
        else throw e;
    }
    return ret;
}

2

Нижче наведено зразок коду для завантаження фільму з Інтернету з кодом java:

URL url = new 
URL("http://103.66.178.220/ftp/HDD2/Hindi%20Movies/2018/Hichki%202018.mkv");
    BufferedInputStream bufferedInputStream = new  BufferedInputStream(url.openStream());
    FileOutputStream stream = new FileOutputStream("/home/sachin/Desktop/test.mkv");


    int count=0;
    byte[] b1 = new byte[100];

    while((count = bufferedInputStream.read(b1)) != -1) {
        System.out.println("b1:"+b1+">>"+count+ ">> KB downloaded:"+new File("/home/sachin/Desktop/test.mkv").length()/1024);
        stream.write(b1, 0, count);
    }

Як правило, відповіді набагато корисніші, якщо вони включають пояснення того, що призначений для виконання коду та чому це вирішує проблему, не вводячи інших.
Тім Дікманн

1

Проблема з простим використанням:

org.apache.commons.io.FileUtils.copyURLToFile(URL, File) 

якщо вам потрібно завантажити та зберегти дуже великі файли, або взагалі, якщо вам потрібні автоматичні повторні спроби у випадку, якщо з'єднання перестане.

Що я пропоную в таких випадках, це Apache HttpClient разом із org.apache.commons.io.FileUtils. Наприклад:

GetMethod method = new GetMethod(resource_url);
try {
    int statusCode = client.executeMethod(method);
    if (statusCode != HttpStatus.SC_OK) {
        logger.error("Get method failed: " + method.getStatusLine());
    }       
    org.apache.commons.io.FileUtils.copyInputStreamToFile(
        method.getResponseBodyAsStream(), new File(resource_file));
    } catch (HttpException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
    method.releaseConnection();
}

1

Узагальнити (і якось відполірувати та оновити) попередні відповіді. Три наступні методи практично рівнозначні. (Я додав явні тайм-аути, тому що вважаю, що вони необхідні; ніхто не хоче, щоб завантаження завісило назавжди, коли зв’язок втрачено.)

public static void saveUrl1(final Path file, final URL url,
   int secsConnectTimeout, int secsReadTimeout)) 
    throws MalformedURLException, IOException {
    // Files.createDirectories(file.getParent()); // optional, make sure parent dir exists
    try (BufferedInputStream in = new BufferedInputStream(
       streamFromUrl(url, secsConnectTimeout,secsReadTimeout)  );
        OutputStream fout = Files.newOutputStream(file)) {
        final byte data[] = new byte[8192];
        int count;
        while((count = in.read(data)) > 0)
            fout.write(data, 0, count);
    }
}

public static void saveUrl2(final Path file, final URL url,
   int secsConnectTimeout, int secsReadTimeout))  
    throws MalformedURLException, IOException {
    // Files.createDirectories(file.getParent()); // optional, make sure parent dir exists
    try (ReadableByteChannel rbc = Channels.newChannel(
      streamFromUrl(url, secsConnectTimeout,secsReadTimeout) 
        );
        FileChannel channel = FileChannel.open(file,
             StandardOpenOption.CREATE, 
             StandardOpenOption.TRUNCATE_EXISTING,
             StandardOpenOption.WRITE) 
        ) {
        channel.transferFrom(rbc, 0, Long.MAX_VALUE);
    }
}

public static void saveUrl3(final Path file, final URL url, 
   int secsConnectTimeout, int secsReadTimeout))  
    throws MalformedURLException, IOException {
    // Files.createDirectories(file.getParent()); // optional, make sure parent dir exists
    try (InputStream in = streamFromUrl(url, secsConnectTimeout,secsReadTimeout) ) {
        Files.copy(in, file, StandardCopyOption.REPLACE_EXISTING);
    }
}

public static InputStream streamFromUrl(URL url,int secsConnectTimeout,int secsReadTimeout) throws IOException {
    URLConnection conn = url.openConnection();
    if(secsConnectTimeout>0) conn.setConnectTimeout(secsConnectTimeout*1000);
    if(secsReadTimeout>0) conn.setReadTimeout(secsReadTimeout*1000);
    return conn.getInputStream();
}

Я не знаходжу значних відмінностей, мені все здається правильним. Вони безпечні та ефективні. (Відмінності в швидкості здаються навряд чи актуальними - я записую 180 Мб з локального сервера на SSD диск у часи, що коливаються приблизно від 1,2 до 1,5 секунд). Вони не потребують зовнішніх бібліотек. Всі роботи з довільними розмірами та (на мій досвід) перенаправленнями HTTP.

Крім того, все кидати, FileNotFoundExceptionякщо ресурс не знайдено (помилка 404, як правило), і java.net.UnknownHostExceptionякщо роздільна здатність DNS не вдалася; інші IOException відповідають помилкам під час передачі.

(Позначена як вікі спільноти, сміливо додайте інформацію або виправлення)


1

Існує метод U.fetch (url) у підкреслювальній ява- бібліотеці.

pom.xml:

  <groupId>com.github.javadev</groupId>
  <artifactId>underscore</artifactId>
  <version>1.45</version>

Приклад коду:

import com.github.underscore.lodash.U;

public class Download {
    public static void main(String ... args) {
        String text = U.fetch("https://stackoverflow.com/questions"
        + "/921262/how-to-download-and-save-a-file-from-internet-using-java").text();
    }
}

наскільки корисна ця відповідь, коли посилання стає недійсним? Подивіться, будь ласка, як відповісти
JimHawkins

Код не компілюється. Питання попросіть вирішити Java, але ваша відповідь виглядає такJavaScript
talex

@talex Я додав розділ pom.xml та покращений приклад коду.
Валентин Колесніков

0
public class DownloadManager {

    static String urls = "[WEBSITE NAME]";

    public static void main(String[] args) throws IOException{
        URL url = verify(urls);
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        InputStream in = null;
        String filename = url.getFile();
        filename = filename.substring(filename.lastIndexOf('/') + 1);
        FileOutputStream out = new FileOutputStream("C:\\Java2_programiranje/Network/DownloadTest1/Project/Output" + File.separator + filename);
        in = connection.getInputStream();
        int read = -1;
        byte[] buffer = new byte[4096];
        while((read = in.read(buffer)) != -1){
            out.write(buffer, 0, read);
            System.out.println("[SYSTEM/INFO]: Downloading file...");
        }
        in.close();
        out.close();
        System.out.println("[SYSTEM/INFO]: File Downloaded!");
    }
    private static URL verify(String url){
        if(!url.toLowerCase().startsWith("http://")) {
            return null;
        }
        URL verifyUrl = null;

        try{
            verifyUrl = new URL(url);
        }catch(Exception e){
            e.printStackTrace();
        }
        return verifyUrl;
    }
}

Ви можете покращити свою відповідь, надавши інформацію, як працює ваш код, а не просто скидати його.
Матей Кормут


0

Якщо ви стоїте за проксі-сервером, ви можете встановити проксі в програмі java, як показано нижче:

        Properties systemSettings = System.getProperties();
        systemSettings.put("proxySet", "true");
        systemSettings.put("https.proxyHost", "https proxy of your org");
        systemSettings.put("https.proxyPort", "8080");

Якщо ви не за проксі-сервером, не включайте у свій код рядки вище. Повний робочий код для завантаження файлу, коли ви знаходитесь за проксі-сервером.

public static void main(String[] args) throws IOException {
        String url="https://raw.githubusercontent.com/bpjoshi/fxservice/master/src/test/java/com/bpjoshi/fxservice/api/TradeControllerTest.java";
        OutputStream outStream=null;
        URLConnection connection=null;
        InputStream is=null;
        File targetFile=null;
        URL server=null;
        //Setting up proxies
        Properties systemSettings = System.getProperties();
            systemSettings.put("proxySet", "true");
            systemSettings.put("https.proxyHost", "https proxy of my organisation");
            systemSettings.put("https.proxyPort", "8080");
            //The same way we could also set proxy for http
            System.setProperty("java.net.useSystemProxies", "true");
            //code to fetch file
        try {
            server=new URL(url);
            connection = server.openConnection();
            is = connection.getInputStream();
            byte[] buffer = new byte[is.available()];
            is.read(buffer);

                targetFile = new File("src/main/resources/targetFile.java");
                outStream = new FileOutputStream(targetFile);
                outStream.write(buffer);
        } catch (MalformedURLException e) {
            System.out.println("THE URL IS NOT CORRECT ");
            e.printStackTrace();
        } catch (IOException e) {
            System.out.println("Io exception");
            e.printStackTrace();
        }
        finally{
            if(outStream!=null) outStream.close();
        }
    }

0

1-й метод з використанням нового каналу

ReadableByteChannel aq = Channels.newChannel(new url("https//asd/abc.txt").openStream());
FileOutputStream fileOS = new FileOutputStream("C:Users/local/abc.txt")
FileChannel writech = fileOS.getChannel();

2-й метод за допомогою FileUtils

FileUtils.copyURLToFile(new url("https//asd/abc.txt",new local file on system("C":/Users/system/abc.txt"));

3-й метод використання

InputStream xy = new ("https//asd/abc.txt").openStream();

Ось так ми можемо завантажити файл за допомогою базового коду Java та інших сторонніх бібліотек. Вони призначені лише для швидкого ознайомлення. Щоб отримати детальну інформацію та інші параметри, будь ласка, google з перерахованими вище ключовими словами.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.