Java: Como fazer download de um arquivo


As vezes precisamos baixar um arquivo utilizando Java e existem várias formas de fazer isso. Neste post você verá 3 formas de fazer o download de um arquivo com Java.

  • Apache Commons IO
  • Java IO
  • Java NIO

Apache Commons IO

A minha forma preferida de baixar arquivos com Java, e algumas outras tarefas, é utilizando a biblioteca Commons IO da Apache.

A Commons IO tem uma classe chamada FileUtils que tem vários métodos estáticos úteis, um deles é o FileUtils.copyURLToFile(URL source, File destination).

O código abaixo mostra um exemplo de como baixar um arquivo utilizando a Apache Commons IO.

package br.com.dicasdejava.util;

import org.apache.commons.io.FileUtils;

import java.io.File;
import java.io.IOException;
import java.net.URL;

public class DownloadFile {

    public static void main(String[] args) throws IOException {

        URL url = new URL("http://dicasdejava.com.br/images/logo-java.png");
        File file = new File("C:\\temp\\arquivo-baixado.png");

        FileUtils.copyURLToFile(url, file);

    }

}

Lembrando que é necessário adicionar a biblioteca Commons IO como dependência do seu projeto. Se você estiver utilizando o maven, basta adicionar a dependência do Apache Commons IO no seu arquivo pom.xml.

<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.6</version>
</dependency>

Java IO

Uma forma de baixar um arquivo com java, sem usar nenhuma dependência, é com o pacote java.io nativo do java.

Basta obter o arquivo num InputStream e escrevê-lo num FileOutputStream.

package br.com.dicasdejava.util;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;

public class DownloadFile {

    public static void main(String[] args) throws IOException {

        URL url = new URL("http://dicasdejava.com.br/images/logo-java.png");
        File file = new File("C:\\temp\\arquivo-baixado.png");

        InputStream is = url.openStream();
        FileOutputStream fos = new FileOutputStream(file);

        int bytes = 0;

        while ((bytes = is.read()) != -1) {
            fos.write(bytes);
        }

        is.close();

        fos.close();
    }


}

Java NIO

Por fim, também podemos usar outro pacote nativo do Java: java.nio

package br.com.dicasdejava.util;

import java.io.File;
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 url = new URL("http://dicasdejava.com.br/images/logo-java.png");
        File file = new File("/home/gustavo/arquivo-baixado.png");

        ReadableByteChannel rbc = Channels.newChannel(url.openStream());
        FileOutputStream fos = new FileOutputStream(file);
        fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
        fos.close();
        rbc.close();

    }

}

Referências:

  1. Maven: Commons IO
  2. JavaDoc: FileUtils
  3. JavaDoc: URL
  4. JavaDoc: FileOutputStream
  5. JavaDoc: InputStream
  6. JavaDoc: FileChannel
  7. JavaDoc: ReadableByteChannel