Scarica file in Java

Rupam Yadav 12 ottobre 2023
  1. Scarica un file usando il pacchetto java.nio in Java
  2. Scarica un file usando FileUtils.copyURLToFile() in Java
  3. Scarica un file usando Files.copy() in Java
Scarica file in Java

Questo articolo ci insegna come possiamo scaricare un file in Java utilizzando vari metodi. Di seguito, vedremo quattro modi per scaricare un file in Java. Il nostro obiettivo principale è solo quello di scaricare un file da un URL che useremo negli esempi.

Scarica un file usando il pacchetto java.nio in Java

Il primo esempio in questo tutorial utilizza il pacchetto java.nio che è solo un’alternativa migliorata e avanzata al tradizionale java.io di Java. La parte nio sta per New Input/Output, che dice che ha capacità migliori rispetto al pacchetto precedente. java.nio fornisce nuovi metodi di rete che possiamo utilizzare.

Nel codice seguente, per prima cosa, creiamo un oggetto URL fetchWebsite con l’URL da cui vogliamo scaricare il nostro file. Successivamente, costruiamo un canale che legge il flusso da fetchWebsite, e lo facciamo chiamando il metodo newChannel() della classe Channels. Per creare uno stream chiamiamo openStream() da fetchWebsite.

Ora creiamo un oggetto FileOutputStream fos che crea un file localmente con il nome specificato. Infine, otteniamo il file dalla fonte online utilizzando il metodo transferFrom(). Questo metodo trasferisce i dati dalla sorgente a un FileChannel che scrive nel fos. transferFrom() prende tre argomenti, il primo è l’oggetto readableByteChannel, il secondo è la posizione da cui vogliamo iniziare a scrivere il file, ovvero la posizione 0 e infine il numero massimo di byte da trasferire.

import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URL;
import java.nio.channels.Channels;
import java.nio.channels.ReadableByteChannel;

public class DownloadFile {
  public static void main(String[] args) throws IOException {
    URL fetchWebsite = new URL(
        "https://theswissbay.ch/pdf/Gentoomen%20Library/Programming/Java/Introduction%20to%20Java%20IO.pdf");
    ReadableByteChannel readableByteChannel = Channels.newChannel(fetchWebsite.openStream());

    try (FileOutputStream fos = new FileOutputStream("C:\\Users\\Downloads\\IntroToJava.pdf")) {
      fos.getChannel().transferFrom(readableByteChannel, 0, Long.MAX_VALUE);
    }
  }
}

Scarica un file usando FileUtils.copyURLToFile() in Java

Il prossimo modo migliore per scaricare un file da una fonte online è utilizzare il metodo FileUtils.copyUrlToFile() incluso nella libreria Apache Commons-IO.

Usiamo il codice seguente per includere la dipendenza nel progetto.

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-io</artifactId>
    <version>1.3.2</version>
</dependency>

Di seguito, creiamo un oggetto URL con il collegamento alla risorsa file online. Successivamente, creiamo un file locale in cui può risiedere il file scaricato. Per fare ciò, creiamo un oggetto della classe File e passiamo il nome del file con l’estensione al suo costruttore.

Infine, chiamiamo il metodo copyURLToFile() della classe FileUtils che accetta due argomenti: l’oggetto URL e l’oggetto file.

import java.io.File;
import java.io.IOException;
import java.net.URL;
import org.apache.commons.io.FileUtils;

public class DownloadFile {
  public static void main(String[] args) throws IOException {
    URL fetchWebsite = new URL(
        "https://theswissbay.ch/pdf/Gentoomen%20Library/Programming/Java/Introduction%20to%20Java%20IO.pdf");

    File file = new File("JavaIo.pdf");

    FileUtils.copyURLToFile(fetchWebsite, file);
  }
}

Scarica un file usando Files.copy() in Java

Proprio come nel primo esempio, usiamo il pacchetto java.nio ma per chiamare un metodo diverso. copy() è un metodo della classe Files. Come suggerisce il nome della funzione, copia un file nella destinazione specificata.

Nel codice abbiamo un oggetto URL fetchWebsite che punta all’origine del file. Creiamo un oggetto di Path che dice al target dove vogliamo che venga copiato il file. Successivamente, apriamo un flusso per ottenere i byte dalla risorsa online e passiamo inputSteam a copy(). Poiché richiede tre argomenti, il primo e il secondo sono gli oggetti inputStream e path, mentre il terzo specifica CopyOption o il modo in cui deve essere eseguita l’operazione di copia. Usiamo StandardCopyOption.REPLACE_EXISTING per sostituire il file se esiste già.

import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;

public class DownloadFile {
  public static void main(String[] args) throws IOException {
    URL fetchWebsite = new URL(
        "https://theswissbay.ch/pdf/Gentoomen%20Library/Programming/Java/Introduction%20to%20Java%20IO.pdf");

    Path path = Paths.get("JavaIO.pdf");
    try (InputStream inputStream = fetchWebsite.openStream()) {
      Files.copy(inputStream, path, StandardCopyOption.REPLACE_EXISTING);
    }
  }
}
Autore: Rupam Yadav
Rupam Yadav avatar Rupam Yadav avatar

Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.

LinkedIn