Come scaricare e salvare un file da Internet usando Java?


425

C'è un file online (come http://www.example.com/information.asp) che devo prendere e salvare in una directory. So che ci sono diversi metodi per afferrare e leggere i file online (URL) riga per riga, ma c'è un modo per scaricare e salvare il file usando Java?


Risposte:


560

Dare Java NIO una prova:

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

L'uso transferFrom()è potenzialmente molto più efficiente di un semplice ciclo che legge dal canale sorgente e scrive su questo canale. Molti sistemi operativi possono trasferire byte direttamente dal canale di origine nella cache del filesystem senza copiarli.

Scopri di più qui .

Nota : il terzo parametro in transferFrom è il numero massimo di byte da trasferire. Integer.MAX_VALUEtrasferirà al massimo 2 ^ 31 byte, Long.MAX_VALUEconsentirà al massimo 2 ^ 63 byte (maggiore di qualsiasi file esistente).


22
Chiudere tutti e tre con Java 7 try-con-risorsa:. Try (InputStream inputStream = website.openStream (); ReadableByteChannel readableByteChannel = Channels.newChannel (inputStream); FileOutputStream FileOutputStream = new FileOutputStream (OutputFileName)) {fileOutputStream.getChannel () transferFrom (readableByteChannel, 0, 1 << 24); }
mazatwork

80
Questo scaricherà solo i primi 16 MB di un file: stackoverflow.com/questions/8405062/downloading-files-with-java
Ben McCann

31
@kirdie e se voglio più della 8388608TB?
Cruncher,

22
Una singola chiamata non è adeguata. transferFrom()non è specificato per completare l'intero trasferimento in una singola chiamata. Ecco perché restituisce un conteggio. Devi fare un giro.
Marchese di Lorne,

11
Perché questa risposta è stata persino accettata? URL::openStream()restituisce solo un flusso regolare, il che significa che l'intero traffico viene ancora copiato tramite array di byte Java [] anziché rimanere nei buffer nativi. In fos.getChannel()realtà è solo un canale nativo, quindi l'overhead rimane per intero. Questo è zero guadagni dall'uso di NIO in questo caso. Oltre ad essere rotto, come EJP e Ben MacCann hanno notato correttamente.
Ext3h

495

Usa apache commons-io , solo un codice di riga:

FileUtils.copyURLToFile(URL, File)

22
Bello! Proprio quello che sto cercando! Sapevo che le librerie Apache lo avrebbero già trattato. A proposito, si consiglia di utilizzare la versione sovraccarica con parametri di timeout!
Hendy Irawan,

6
... e quando si utilizza quella versione sovraccarica, ricordare che i timeout sono specificati in millisecondi, non secondi.
László van den Hoek,

5
Si noti che copyURLToFilecon il parametro timeout è disponibile solo dalla versione 2.0 della libreria IO IO. Vedi i documenti Java
Stanley,

6
cosa succede se la richiesta di autenticazione di base deve essere aggiunta alla richiesta? c'è una soluzione?
Damian,

3
Anche se questo è "breve", in realtà è molto lento.
Meinkraft,

123

Utilizzo nio più semplice:

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

5
Sfortunatamente questo non riesce (scarica 0 byte) in caso di reindirizzamento come "302 Found".
Alexander K,

1
@AlexanderK Ma perché dovresti comunque scaricare ciecamente una tale risorsa?
Xuesheng,

5
Nonostante si tratti di una soluzione elegante, dietro le quinte questo approccio potrebbe tradirti silenziosamente. Files.copy (InputStream, Paths, FileOption) delega il processo di copia a Files.copy (InputStream, OutputStream). Quest'ultimo metodo non controlla la fine del flusso (-1) ma verifica l'assenza di byte letti (0). Significa che, se la tua rete ha avuto una piccola pausa, potrebbe leggere 0 byte e terminare il processo di copia, anche se lo streaming non è finito per essere scaricato dal sistema operativo.
Miere,

6
@Miere È impossibile InputStream.read()restituire zero a meno che non sia stato fornito un buffer o un conteggio di lunghezza zero, "piccola pausa" o altro. Si bloccherà fino a quando almeno un byte è stato trasferito o alla fine del flusso o si verifica un errore. La tua affermazione sull'interno di Files.copy()non ha fondamento.
Marchese di Lorne,

3
Ho un test unitario che legge un file binario con 2.6TiB. Usando Files.copy fallisce sempre sul mio server di archiviazione HDD (XFS) ma fallisce solo poche volte su quello SSH. Guardando JDK 8 il codice di File.copy ho identificato che controlla '> 0' per lasciare il ciclo 'while'. Ho appena copiato esattamente lo stesso codice con -1 ed entrambi i test unitari non si sono mai più interrotti. Una volta che InputStream può rappresentare i descrittori di file locali e di rete ed entrambe le operazioni di I / O sono soggette al cambio di contesto del sistema operativo, non riesco a capire perché la mia affermazione sia priva di fondamento. Si può dire che funzioni per fortuna, ma non ha più dato mal di testa.
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();
        }
    }
}

Dovrai gestire le eccezioni, probabilmente esterne a questo metodo.


6
Come scaricare molto più velocemente? Come acceleratore di download?
digz6666,

11
Se in.closegenera un'eccezione, fout.closenon viene chiamato.
Berillio il

1
@ComFreek Questo è semplicemente falso. L'uso di a BufferedInputStreamha esattamente zero effetti sui timeout dei socket. Lo avevo già confutato come "mito urbano" nei miei commenti ai "dettagli di fondo" che hai citato. Tre anni prima.
Marchese di Lorne,

@EJP Grazie per la correzione! Ho rimosso il mio commento (per l'archivio: ho collegato a questa risposta affermando che BufferedInputStream"può causare errori imprevedibili").
ComFreek,

+1 La mia unica obiezione a questa risposta (e altri qui) è che il chiamante non può distinguere l'evento "non trovato" da un errore di connessione (su cui potresti voler riprovare).
leonbloy,

24

È una vecchia domanda ma ecco una soluzione concisa, leggibile, solo per JDK con risorse correttamente chiuse:

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

Due righe di codice e nessuna dipendenza.


Per le persone che si chiedono, ecco l'importazione necessaria per questo frammento di codice:import java.io.InputStream; import java.net.URI; import java.nio.file.Files; import java.nio.file.Paths;
BelovedFool

23

Il download di un file richiede di leggerlo, in entrambi i casi dovrai scorrere il file in qualche modo. Invece di riga per riga, puoi semplicemente leggerlo per byte dallo stream:

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

Quando si utilizza, Java 7+utilizzare il seguente metodo per scaricare un file da Internet e salvarlo in una directory:

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;
}

Documentazione qui .


16

Questa risposta è quasi esattamente come la risposta selezionata ma con due miglioramenti: è un metodo e chiude l'oggetto 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
Una singola chiamata non è adeguata. transferFrom()non è specificato per completare l'intero trasferimento in una singola chiamata. Ecco perché restituisce un conteggio. Devi fare un giro.
Marchese di Lorne,

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
Se in.closegenera un'eccezione, out.closenon viene chiamato.
Berillio il


6

Questa è un'altra variante di java7 basata sulla risposta di Brian Risk con l'utilizzo dell'istruzione try-with:

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

  }

Una singola chiamata non è adeguata. transferFrom()non è specificato per completare l'intero trasferimento in una singola chiamata. Ecco perché restituisce un conteggio. Devi fare un giro.
Marchese di Lorne,

Non so perché mi stai rivolgendo a quella stupida domanda. Non ha nulla a che fare con quello che ho detto, e mi rifiuto davvero di avere parole messe in bocca.
Marchese di Lorne,

2

È possibile scaricare il file con con Apache HttpComponentsanziché Commons-IO. Questo codice consente di scaricare un file in Java in base al suo URL e salvarlo nella destinazione specifica.

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;
}

A differenza della singola riga di codice:

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

questo codice ti darà maggiore controllo su un processo e ti consentirà di specificare non solo timeout ma anche valori User-Agente Referervalori fondamentali per molti siti web.


2

Ci sono molte risposte eleganti ed efficienti qui. Ma la concisione può farci perdere alcune informazioni utili. In particolare, spesso non si desidera considerare un errore di connessione un'eccezione e si potrebbe voler trattare in modo diverso un qualche tipo di errore relativo alla rete, ad esempio per decidere se ripetere il download.

Ecco un metodo che non genera eccezioni per errori di rete (solo per problemi veramente eccezionali, come url non corretto o problemi nella scrittura nel file)

/**
 * 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

Di seguito è riportato il codice di esempio per scaricare film da Internet con codice 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);
    }

In generale, le risposte sono molto più utili se includono una spiegazione di ciò che il codice è destinato a fare e perché risolve il problema senza introdurre altri.
Tim Diekmann,

1

Si è verificato un problema con l'utilizzo semplice di:

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

se è necessario scaricare e salvare file di dimensioni molto grandi, o in generale se sono necessari tentativi automatici in caso di interruzione della connessione.

Quello che suggerisco in questi casi è Apache HttpClient insieme a org.apache.commons.io.FileUtils. Per esempio:

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

Riassumere (e in qualche modo lucidare e aggiornare) le risposte precedenti. I tre metodi seguenti sono praticamente equivalenti. (Ho aggiunto timeout espliciti perché penso che siano indispensabili, nessuno vuole che un download si blocchi per sempre quando si perde la connessione.)

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

Non trovo differenze significative, mi sembrano tutte giuste. Sono sicuri ed efficienti. (Le differenze di velocità sembrano poco rilevanti: scrivo 180 Mb dal server locale su un disco SSD in tempi che oscillano tra 1,2 e 1,5 secondi). Non richiedono librerie esterne. Tutti funzionano con dimensioni arbitrarie e (per la mia esperienza) reindirizzamenti HTTP.

Inoltre, tutti lanciano FileNotFoundExceptionse la risorsa non viene trovata (errore 404, in genere) e java.net.UnknownHostExceptionse la risoluzione DNS non è riuscita; altra IOException corrisponde ad errori durante la trasmissione.

(Contrassegnato come wiki della community, sentiti libero di aggiungere informazioni o correzioni)


1

Esiste il metodo U.fetch (url) nella libreria underscore-java .

pom.xml:

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

Esempio di codice:

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

quanto è utile questa risposta, quando il link diventa non valido? Per favore, guarda Come rispondere
JimHawkins,

Il codice non verrà compilato. Domanda chiedere soluzione Java, ma la tua risposta è simileJavaScript
talex

@talex Ho aggiunto la sezione pom.xml e un esempio di codice migliorato.
Valentyn Kolesnikov,

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;
    }
}

Puoi migliorare la tua risposta fornendo informazioni su come funziona il tuo codice invece di scaricarlo.
Matej Kormuth,

0

Puoi farlo in 1 riga usando netloader per Java :

new NetFile(new File("my/zips/1.zip"), "https://example.com/example.zip", -1).load(); //returns true if succeed, otherwise false.

0

Se sei dietro un proxy, puoi impostare i proxy nel programma Java come di seguito:

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

Se non si è dietro un proxy, non includere le righe sopra nel codice. Codice di lavoro completo per scaricare un file quando si è dietro un proxy.

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

1o metodo utilizzando il nuovo canale

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

2o metodo utilizzando FileUtils

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

3o metodo utilizzando

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

Ecco come possiamo scaricare il file utilizzando il codice java di base e altre librerie di terze parti. Questi sono solo per riferimento rapido. Si prega di google con le parole chiave sopra per ottenere informazioni dettagliate e altre opzioni.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.