Fazer Download de Arquivo com Java  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
nathanpc
JavaTeenager
[Avatar]
Membro desde: 01/04/2009 16:23:58
Mensagens: 180
Localização: Vitória/ES
Offline

Olá,
Alguem poderia me ajudar, porque eu estou querendo fazer um programa que o usuário final poderia digitar uma URL para um arquivo tipo: "http://www.site.com.br/java/File.zip". Lembrando que eu sou meio que iniciante.

Obrigado,
Nathan Paulino Campos

Eee PC 904HD | Ubuntu Intrepid Ibex | 1 GB RAM | 80 GB HD | Twitter | Facebook | Orkut | Blog
ICQ: 424738586
Skype: ubuntu-nathan
Google Talk: eeepc904@gmail.com
YIM: nathanpc@ymail.com
AIM: nathanjava
[Email] [WWW] [Yahoo!] aim icon [MSN] [ICQ]
mcbrain
Thread.start()

Membro desde: 01/06/2009 17:51:25
Mensagens: 34
Localização: Imaginário
Offline

Olá nathanpc. Vou apresentar um método pronto (bem simples) que você pode utilizar para gravar arquivos a partir de uma URL.



Espero que tenha ajudado. Isto não é exatamente java avançado, e algumas buscas no Google poderiam ter lhe ajudado bastante, pois vários sites oferecem snippets prontos com várias maneiras de executar tarefas corriqueiras como esta.

Veja a descrição das classes e métodos utilizados neste exemplo na especificação da API do Java, e você irá entender exatamente o que o programa faz. Lembre-se que a melhor maneira de aprender é experimentando!

--mcbrain

Aut dosce, aut disce, aut discede.
nathanpc
JavaTeenager
[Avatar]
Membro desde: 01/04/2009 16:23:58
Mensagens: 180
Localização: Vitória/ES
Offline

Olá mcbrain,
Obrigado pelo código, eu o compilo e dá tudo certo, mas quando eu vou executar o arquivo class, ele me volta esse erro:



Obrigado,
Nathan Paulino Campos

Eee PC 904HD | Ubuntu Intrepid Ibex | 1 GB RAM | 80 GB HD | Twitter | Facebook | Orkut | Blog
ICQ: 424738586
Skype: ubuntu-nathan
Google Talk: eeepc904@gmail.com
YIM: nathanpc@ymail.com
AIM: nathanjava
[Email] [WWW] [Yahoo!] aim icon [MSN] [ICQ]
mcbrain
Thread.start()

Membro desde: 01/06/2009 17:51:25
Mensagens: 34
Localização: Imaginário
Offline

nathanpc wrote:Olá mcbrain,
Obrigado pelo código, eu o compilo e dá tudo certo, mas quando eu vou executar o arquivo class, ele me volta esse erro:



Obrigado,
Nathan Paulino Campos


Ah, Nathan, já deu pra ver que você é novo no Java mesmo!

Para que um arquivo java compilado possa ser executado, ele precisa de um ponto de entrada, o método "main()".

Coloque o seguinte método antes ou depois do método estático gravaArquivoDeURL() na classe que você está usando, recompile e execute.



Este exemplo irá gravar a página de índice do Google na raiz do seu PC. Pra não perder a viagem, dê uma olhada nos tutoriais da Sun sobre o Java. Uma vez que você domine os conceitos básicos, vai ficar muito mais fácil criar seus próprios programas. Abraços!

-- mcbrain

Aut dosce, aut disce, aut discede.
nathanpc
JavaTeenager
[Avatar]
Membro desde: 01/04/2009 16:23:58
Mensagens: 180
Localização: Vitória/ES
Offline

Muito Obrigado mcbrain, mas sem querer ser muito pidão você poderia me dizer se da para que o usuário digitase a URL para o arquivo, só para melhorar o programa e já saber para mais tarde se eu precisar.

Mas Muito Muito Obrigado,
Nathan Paulino Campos

This message was edited 1 time. Last update was at 01/06/2009 19:07:54


Eee PC 904HD | Ubuntu Intrepid Ibex | 1 GB RAM | 80 GB HD | Twitter | Facebook | Orkut | Blog
ICQ: 424738586
Skype: ubuntu-nathan
Google Talk: eeepc904@gmail.com
YIM: nathanpc@ymail.com
AIM: nathanjava
[Email] [WWW] [Yahoo!] aim icon [MSN] [ICQ]
mcbrain
Thread.start()

Membro desde: 01/06/2009 17:51:25
Mensagens: 34
Localização: Imaginário
Offline

A forma mais simples é passar a URL como argumento do programa, e já que vamos fazer isso, também passar o path de destino da gravação.

Seu método main, portanto, deverá aceitar 2 argumentos. Veja que ele tem apenas um parâmetro: um array de Strings chamado args. Isto é fixado pela especificação da linguagem Java. A JVM irá encaspular cada argumento da chamada do programa em uma String do parâmetro args, que podem ser referenciados e manipulados dentro do programa. Para usar vários argumentos na chamada do programa, separe-os por um espaço.

Altere o seu método main para o seguinte:


Após compilado o programa, chame-o com o comando:

java FileDownload http://www.google.com/index.html c:\

[]s
--mcbrain

This message was edited 1 time. Last update was at 01/06/2009 19:31:47


Aut dosce, aut disce, aut discede.
nathanpc
JavaTeenager
[Avatar]
Membro desde: 01/04/2009 16:23:58
Mensagens: 180
Localização: Vitória/ES
Offline

Muito obrigado mcbrain, muito obrigado mesmo.

Abraços!!

Eee PC 904HD | Ubuntu Intrepid Ibex | 1 GB RAM | 80 GB HD | Twitter | Facebook | Orkut | Blog
ICQ: 424738586
Skype: ubuntu-nathan
Google Talk: eeepc904@gmail.com
YIM: nathanpc@ymail.com
AIM: nathanjava
[Email] [WWW] [Yahoo!] aim icon [MSN] [ICQ]
Neri J?ior
What is classpath?

Membro desde: 08/03/2009 16:15:09
Mensagens: 7
Localização: Curitiba - PR
Offline

Desculpe minha ignorancia, estou a horas tentando fazer com o Buffered mas não esta indo de jeito nenhum!
Alguem poderia me dar uma ideia de como seria?
Obrigado.

#Edit
Se não fosse pedir muito, como eu pego o nome do arquivo que esta vindo pelo InputStream? Thanks!

This message was edited 1 time. Last update was at 18/06/2009 18:51:04


Neri Júnior - Neri Júnior - Design e Desenvolvimento
CEO da LSystems Softwares
[WWW] [MSN]
mcbrain
Thread.start()

Membro desde: 01/06/2009 17:51:25
Mensagens: 34
Localização: Imaginário
Offline

Neri J?ior wrote:Desculpe minha ignorancia, estou a horas tentando fazer com o Buffered mas não esta indo de jeito nenhum!
Alguem poderia me dar uma ideia de como seria?
Obrigado.

#Edit
Se não fosse pedir muito, como eu pego o nome do arquivo que esta vindo pelo InputStream? Thanks!


Um dos construtores do BufferedWriter recebe um Writer, e um int com o tamanho do buffer como argumentos. Se você estiver escrevendo em um arquivo, pode usar um FileWriter, que por sua vez pode receber um objeto File como argumento no construtor:

Depois é só usar o método write() do BufferedWriter e sucesso.

Edit: gramática.

This message was edited 1 time. Last update was at 19/06/2009 09:45:46


Aut dosce, aut disce, aut discede.
Neri J?ior
What is classpath?

Membro desde: 08/03/2009 16:15:09
Mensagens: 7
Localização: Curitiba - PR
Offline

Muito Obrigado!

Neri Júnior - Neri Júnior - Design e Desenvolvimento
CEO da LSystems Softwares
[WWW] [MSN]
saint_muniz
HelloWorld

Membro desde: 16/06/2009 12:24:26
Mensagens: 10
Offline

Olá a todos, estou precisando de uma ajuda.

Estou utilizando a seguinte classe para fazer o download de um arquivo via FTP:

TesteDownloadArquivoExcel


Ao executar o metodo "con.getInputStream()" estou recebendo uma Exception: "java.net.SocketException: Connection reset"

Alguém poderia me dizer o que estou fazendo de errado?

Desde já grato pela atenção.

At,

Saint Clair
Técnico em Informática
marcobiscaro2112
JWizard

Membro desde: 01/12/2008 11:56:04
Mensagens: 2408
Localização: São Paulo - SP
Offline

FTP é um protocolo. Para que você baixe o arquivo você precisa fazer a requisição (assim como em HTTP, quando você faz um GET ou um POST).

Não basta tentar baixar diretamente. A Apache tem uma API para trabalhar com FTP, talvez seja melhor procurar sobre ela.

Marco Biscaro.

Seja livre!

Você sabia que provavelmente há milhares de arquivos duplicados no seu computador?

Ei... você está usando DefaultTableModel no seu projeto?? Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[Email] [WWW] [MSN]
saint_muniz
HelloWorld

Membro desde: 16/06/2009 12:24:26
Mensagens: 10
Offline

Ainda estou tendo problemas, dei uma olhada na documentação "org.apache.commons.net.ftp.FTPClient", mas ainda está ocorrendo a SocketException.

Modifiquei o codigo do método da classe.



O método de verifcação de HOST já ativei e desativei e continua o problema.

Alguém poderia me ajudar com esse código?
Por favor...

At,

Saint Clair
Técnico em Informática
marcobiscaro2112
JWizard

Membro desde: 01/12/2008 11:56:04
Mensagens: 2408
Localização: São Paulo - SP
Offline

3 coisas:

1. Você tem certeza que o servidor está OK? Você consegue resgatar esse arquivo se você abrir a linha de comando e se conectar ao servidor?

2. Em que linha exatamente está ocorrendo a exceção?

3. O FTPClient já está em modo passivo por padrão? Se não estiver, deve estar.

Marco Biscaro.

Seja livre!

Você sabia que provavelmente há milhares de arquivos duplicados no seu computador?

Ei... você está usando DefaultTableModel no seu projeto?? Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[Email] [WWW] [MSN]
saint_muniz
HelloWorld

Membro desde: 16/06/2009 12:24:26
Mensagens: 10
Offline

marcobiscaro2112 wrote:3 coisas:

1. Você tem certeza que o servidor está OK? Você consegue resgatar esse arquivo se você abrir a linha de comando e se conectar ao servidor?

2. Em que linha exatamente está ocorrendo a exceção?

3. O FTPClient já está em modo passivo por padrão? Se não estiver, deve estar.


Resposta:
1 - A linha do código de demonstração verifica se conectou corretamente. Em debug verifiquei se estava conectando corretamente. Tudo OK.

2 - Na linha 22 está ocorrendo SocketException.

3 - Sim está por default.


Usei uma solução um tanto quanto grosseira.

Como meu servidor de aplicativo fica em LINUX, usei o Runtime.getRuntime().exec("Comando a ser executado"), usando o wget passando a url de conexão com o FTP.

Funcionou mas tive de criar um método para ler o arquivo excel, sendo que tive de temporizar para dar tempo do download ser concluido.

Mas fica o meu problema porque eu acho que isso não é um funcionamento normal.

At,

Saint Clair
Técnico em Informática
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team