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.dicasdeprogramacao.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://dicasdeprogramacao.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.dicasdeprogramacao.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://dicasdeprogramacao.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.dicasdeprogramacao.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://dicasdeprogramacao.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: