• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

magician

[Java] Downloads de Ficheiro Remotos

6 mensagens neste tópico

Um método simples que permite o download de ficheiros remotos.

public void download(String address, String localFileName) {
   OutputStream out;
   URLConnection conn;
   InputStream  in;
   try {
       URL url = new URL(address);
out = new BufferedOutputStream( new FileOutputStream(localFileName) );
       conn = url.openConnection();
in = conn.getInputStream();
byte[] buffer = new byte[1024];
int numRead;
long numWritten = 0;

       while ((numRead = in.read(buffer)) != -1) {
           out.write(buffer, 0, numRead);
           numWritten += numRead;
       }

       System.out.println(localFileName + "\t" + numWritten);
   }
   catch (Exception exception) {
       exception.printStackTrace();
   }
   finally {
       try {
           if (in != null) {
               in.close();
           }
           if (out != null) {
               out.close();
           }
}
       catch (IOException ioe) {
       }
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Como não acho prático indicar o nome do ficheiro depois de indicar o link, aproveitei o excelente código do magician e fiz umas pequenas modificações:

public void download(String address) {
---
    String localFileName;
    String FileName[] = address.split("/");
    localFileName=FileName[FileName.length-1];
---
    OutputStream out;
    URLConnection conn;
    InputStream  in;
    try {
        URL url = new URL(address);
out = new BufferedOutputStream( new FileOutputStream(localFileName) );
        conn = url.openConnection();
in = conn.getInputStream();
byte[] buffer = new byte[1024];
int numRead;
long numWritten = 0;

        while ((numRead = in.read(buffer)) != -1) {
            out.write(buffer, 0, numRead);
            numWritten += numRead;
        }

        System.out.println(localFileName + "\t" + numWritten);
    } 
    catch (Exception exception) {
        exception.printStackTrace();
    }
    finally {
        try {
            if (in != null) {
                in.close();
            }
            if (out != null) {
                out.close();
            }
} 
        catch (IOException ioe) {
        }
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ai estás a obrigar o a que o ficheiro saia com o mesmo nome o que nem sempre pode dar jeito á sites que tem tipo packs todos com o mesmo nome de download. Mas pronto é uma opção ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

E porque não:

public void download(String address) {
    download(address,null)
}
public void download(String address, String localFilename) {
---
    if (localFilename==null){
      String FileName[] = address.split("/");
      localFileName=FileName[FileName.length-1];
    }

---
    OutputStream out;
    URLConnection conn;
    InputStream  in;
    try {
        URL url = new URL(address);
out = new BufferedOutputStream( new FileOutputStream(localFileName) );
        conn = url.openConnection();
in = conn.getInputStream();
byte[] buffer = new byte[1024];
int numRead;
long numWritten = 0;

        while ((numRead = in.read(buffer)) != -1) {
            out.write(buffer, 0, numRead);
            numWritten += numRead;
        }

        System.out.println(localFileName + "\t" + numWritten);
    } 
    catch (Exception exception) {
        exception.printStackTrace();
    }
    finally {
        try {
            if (in != null) {
                in.close();
            }
            if (out != null) {
                out.close();
            }
} 
        catch (IOException ioe) {
        }
}

....

Java Rules

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Excelente código  ;)

Posso usá-lo nos meus projectos?

Tive que inicializar as variáveis

OutputStream out = null;
URLConnection conn;
InputStream in = null;

Depois tenho que meter uma barra para calcular o progresso de download  :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora