Descargar archivo en Java
-
Descargar un archivo usando el paquete
java.nio
en Java -
Descargar un archivo usando
FileUtils.copyURLToFile()
en Java -
Descargar un archivo usando
Files.copy()
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 Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.
LinkedIn