Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #57 da revista programar. Faz já o download aqui!

magician

[Java] Downloads de Ficheiro Remotos

Mensagens Recomendadas

magician    2
magician

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) {
       }
}

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
mpeixoto    0
mpeixoto

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) {
        }
}

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
magician    2
magician

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 ;)

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
porfirio    0
porfirio

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
S7sRuss    0
S7sRuss

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

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


×

Aviso Sobre Cookies

Ao usar este site você aceita a nossa Política de Privacidade