Descargar archivo en Java

Rupam Yadav 12 octubre 2023
  1. Descargar un archivo usando el paquete java.nio en Java
  2. Descargar un archivo usando FileUtils.copyURLToFile() en Java
  3. Descargar un archivo usando Files.copy() en Java
Descargar archivo en Java

Este artículo nos enseña cómo descargar un archivo en Java usando varios métodos. A continuación, veremos cuatro formas de descargar un archivo en Java. Nuestro objetivo principal es solo descargar un archivo de una URL que usaremos en los ejemplos.

Descargar un archivo usando el paquete java.nio en Java

El primer ejemplo de este tutorial utiliza el paquete java.nio que es solo una alternativa mejorada y avanzada al tradicional java.io de Java. La parte nio significa New Input/Output, que dice que tiene mejores capacidades que el paquete anterior. java.nio proporciona nuevos métodos de trabajo en red que podemos utilizar.

En el siguiente código, primero creamos un objeto URL fetchWebsite con la URL desde donde queremos descargar nuestro archivo. A continuación, construimos un canal que lee el flujo de fetchWebsite, y lo hacemos llamando al método newChannel() de la clase Channels. Para crear una secuencia, llamamos openStream() desde fetchWebsite.

Ahora, creamos un objeto FileOutputStream fos que crea un archivo localmente con el nombre especificado. Finalmente, obtenemos el archivo de la fuente en línea usando el método transferFrom(). Este método transfiere los datos de la fuente a un FileChannel que escribe en el fos. transferFrom() toma tres argumentos, primero es el objeto readableByteChannel, segundo es la posición desde donde queremos comenzar a escribir el archivo, es decir, la posición 0 y finalmente el número máximo de bytes a transferir.

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

Descargar un archivo usando FileUtils.copyURLToFile() en Java

La siguiente mejor manera de descargar un archivo de una fuente en línea es utilizar el método FileUtils.copyUrlToFile() incluido en la biblioteca Apache Commons-IO.

Usamos el siguiente código para incluir la dependencia en el proyecto.

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

A continuación, creamos un objeto URL con el enlace al recurso de archivo en línea. A continuación, creamos un archivo local donde puede residir el archivo descargado. Para ello, hacemos un objeto de la clase File y pasamos el nombre del archivo con la extensión a su constructor.

Por último, llamamos al método copyURLToFile() de la clase FileUtils que toma dos argumentos: el objeto URL y el objeto 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);
  }
}

Descargar un archivo usando Files.copy() en Java

Como en el primer ejemplo, usamos el paquete java.nio pero para llamar a un método diferente. copy() es un método de la clase Files. Como sugiere el nombre de la función, copia un archivo al destino especificado.

En el código, tenemos un objeto URL fetchWebsite que apunta a la fuente del archivo. Creamos un objeto de Path que le dice al destino dónde queremos que se copie el archivo. A continuación, abrimos una secuencia para obtener los bytes del recurso en línea y pasar el inputSteam a copy(). Como toma tres argumentos, el primero y el segundo son los objetos inputStream y path, mientras que el tercero especifica la CopyOption o la forma en que se debe realizar la operación de copia. Usamos StandardCopyOption.REPLACE_EXISTING para reemplazar el archivo si ya existe.

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