Como fazer download de um arquivo da internet com java

Bem fazer download de arquivo é bem simples, vamos utilizar a classe java.net.URL



import java.io.*;
import java.net.URL;
import java.net.URLConnection;

/**
 *
 * @author Moacir.com.br
 * 
 * Exemplo de como fazer download de um arquivo em java.
 * 
 * 
 * 
 */
public class FazDownload {


    public static void main(String[] args)  {
        String protocolo="http";
        String endereco ="moacirrf.com.br";
        String arquivo="/arquivos/JSFImmediate.zip";
        
        try {
           //cria URL
            URL url1 = new URL(protocolo,endereco,arquivo);
            //abre uma conexao na url criada àcima
           URLConnection con =  url1.openConnection();
           
           //tenta conectar.
           con.connect();
           
           //arquivo de saida
            FileOutputStream fileOut = new FileOutputStream("c:/teste/JSFImmediate.zip");
            
            int c=0;
            
           do{
             //le o byte
               c=con.getInputStream().read();
             
               //escreve o byte no arquivo saida
               fileOut.write(c);
               
   
              
           }while(c !=-1);
        
           //fecha o arquivo de saida
           fileOut.close();
           
           System.out.println("Arquivo baixado com sucesso");
        }catch(IOException e){   
                 e.printStackTrace();
        } 
         
    }
}

Segue algumas explicações.

Na linha 23 criamos o objeto URL, dentre os diversos construtores disponíveis na classe, estamos utilizando este que recebe três parâmetros, URL(protocol, host, file).

  • Primeiro-parâmetro é o protocolo, no nosso caso utilizamos o HTTP;
  • Segundo- parâmetro é o host, o endereço do servidor;
  • Terceiro-É o arquivo que você deseja acessar no servidor, poder ser um arquivo de texto, uma pagina html etc, no que no nosso caso estamos acessando o arquivo ZIPque esta dentro da pasta arquivos de modo que a url normal é http://moacirrf.com.br/arquivos/JSFImmediate.zip.

Na linha 25 criamos uma conexão com o host,usando a classe URLConnection, Não é realmente necessário utilizar esta classe para este exemplo, mas o interessante de usa-la, você pode utilizar alguma das suas sublasses como por exemplo a HttpURLConnection para configurar ou receber parâmetros específicos do protocolo HTTP, como por exemplo código do status.

Até logo pessoal;

No votes yet.
Please wait...

3 thoughts on “Como fazer download de um arquivo da internet com java

  1. usei a mesma classe que você colocou com exemplo e resulta no seguinte erro de conexão
    java.net.ConnectException: Connection timed out: connect
    at java.net.DualStackPlainSocketImpl.connect0(Native Method)
    at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:69)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:157)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:391)
    at java.net.Socket.connect(Socket.java:579)
    at java.net.Socket.connect(Socket.java:528)
    at sun.net.NetworkClient.doConnect(NetworkClient.java:180)
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:378)
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:473)
    at sun.net.www.http.HttpClient.(HttpClient.java:203)
    at sun.net.www.http.HttpClient.New(HttpClient.java:290)
    at sun.net.www.http.HttpClient.New(HttpClient.java:306)
    at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:995)
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:931)
    at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:849)
    at Download.Download.main(Download.java:33)

    No votes yet.
    Please wait...
    • Ola Ana Caroline;
      Obrigado pelo post.
      Tente aumentar o timeout de conexão, adicione na linha 27 o seguinte:
      con.setConnectTimeout(0);
      Segue o exemplo, mais completo:
      URLConnection con = url1.openConnection();
      con.setConnectTimeout(0); //passar zero signifca que o timeout é infinito

      Se der certo ou não, responda este comentario.

      Abraço!

      No votes yet.
      Please wait...
      • Pode ser o Java 1.7. Tente desinstalar e instale o 1.6. Funcionou comigo.

        No votes yet.
        Please wait...

Leave a Reply

Your email address will not be published. Required fields are marked *