Baixar arquivo em Java

Rupam Yadav 12 outubro 2023
  1. Baixe um arquivo usando o pacote java.nio em Java
  2. Baixe um arquivo usando FileUtils.copyURLToFile() em Java
  3. Baixe um arquivo usando Files.copy() em Java
Baixar arquivo em Java

Este artigo nos ensina como podemos baixar um arquivo em Java usando vários métodos. Abaixo, veremos quatro maneiras de baixar um arquivo em Java. Nosso foco principal é apenas baixar um arquivo de uma URL que usaremos nos exemplos.

Baixe um arquivo usando o pacote java.nio em Java

O primeiro exemplo neste tutorial usa o pacote java.nio que é apenas uma alternativa melhorada e avançada ao tradicional java.io do Java. A parte nio significa New Input/Output, o que indica que tem melhores capacidades do que o pacote anterior. java.nio fornece novos métodos de rede que podemos usar.

No código a seguir, primeiro, criamos um objeto URL fetchWebsite com a URL de onde queremos baixar nosso arquivo. Em seguida, construímos um canal que lê o fluxo de fetchWebsite e fazemos isso chamando o método newChannel() da classe Channels. Para criar um fluxo chamamos openStream() de fetchWebsite.

Agora, criamos um objeto FileOutputStream fos que cria um arquivo localmente com o nome especificado. Finalmente, obtemos o arquivo da fonte online usando o método transferFrom(). Este método transfere os dados da fonte para um FileChannel que grava no fos. transferFrom() leva três argumentos, primeiro é o objeto readableByteChannel, segundo é a posição de onde queremos começar a escrever o arquivo, ou seja, 0ª posição e por último o 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);
    }
  }
}

Baixe um arquivo usando FileUtils.copyURLToFile() em Java

A próxima melhor maneira de baixar um arquivo de uma fonte online é usar o método FileUtils.copyUrlToFile() incluído na biblioteca Apache Commons-IO.

Usamos o código a seguir para incluir a dependência no projeto.

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

Abaixo, criamos um objeto URL com o link para o recurso de arquivo online. Em seguida, criamos um arquivo local onde o arquivo baixado pode residir. Para fazer isso, fazemos um objeto da classe File e passamos o nome do arquivo com a extensão para seu construtor.

Por fim, chamamos o método copyURLToFile() da classe FileUtils que leva dois argumentos: o objeto URL e o 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);
  }
}

Baixe um arquivo usando Files.copy() em Java

Assim como no primeiro exemplo, usamos o pacote java.nio, mas para chamar um método diferente. copy() é um método da classe Files. Como o nome da função sugere, ela copia um arquivo para o destino especificado.

No código, temos um objeto URL fetchWebsite que aponta para a fonte do arquivo. Criamos um objeto de Path que diz ao destino para onde queremos que o arquivo seja copiado. Em seguida, abrimos um fluxo para obter os bytes do recurso online e passar o inputSteam para copy(). Como leva três argumentos, o primeiro e o segundo são os objetos inputStream e path, enquanto o terceiro especifica o CopyOption ou a forma como a operação de cópia deve ser realizada. Usamos StandardCopyOption.REPLACE_EXISTING para substituir o arquivo se ele já existir.

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