Estou querendo fazer download de arquivos anexados a um email. A parte do javamail eu já sei. O que gostaria de saber é:
[list]Como faço para mostrar a taxa de download?[/list]
[list]E a barra de progresso?[/list]
[list]Tenho que colocar um Thread.sleep(ms); para poder esperar os bytes chegar ou não precisa?[/list]
Se alguem puder me ajudar em alguma dessas dúvidas, agradeço muito.
Thread.Sleep()? Não há solução com o Thread.Sleep(), porém, minha idéia é um Thread que leia o tamanho do arquivo original, receba os bytes já copiados e realize um cálculo simples (regra-de-três).
Molezinha demais, hein?
Falou.
F
forever_juba
Que? Para que esse calculo?
E
EdicleoOliveira
PORCENTAGEM, CAMARADA, PORCENTAGEM!
F
forever_juba
Isso para o progresso? ou para saber se já foi baixado? Como sei que já foi baixado? vai depender da velocidade de conexão de cada um, certo? ou não devo me preocupar com isso?
E
EdicleoOliveira
Sim! Você não disse que deseja criar uma ‘barra de progresso’?
Camarada, já tem algum pseudocódigo em mente?
Poste seu código de download e tentamos implementar a lógica para a solução.
F
forever_juba
publicvoidprocessMail()throwsMessagingException{try{StringservidorPOP3="pop.mail.yahoo.com";Stringusuario="forever_juba";Stringsenha="senha";Propertiesprops=System.getProperties();props.put("mail.pop3.ssl.enable","true");Sessionsession=Session.getDefaultInstance(props,null);Storepop=session.getStore("pop3");pop.connect(servidorPOP3,usuario,senha);Folderfolder=pop.getDefaultFolder();folder=folder.getFolder("INBOX");folder.open(Folder.READ_ONLY);messages=folder.getMessages();for(intmessageNumber=0;messageNumber<messages.length;messageNumber++){message=messages[messageNumber];msgObj=message.getContent();// Determine o tipo de emailif(msgObjinstanceofMultipart){multipart=(Multipart)message.getContent();for(inti=0;i<multipart.getCount();i++){part=multipart.getBodyPart(i);// pegando um tipo do conteúdocontentType=part.getContentType();StringfileName2=part.getFileName();if(fileName2!=null){System.out.println(messageNumber+" "+fileName2+" | "+message.getSubject());InputStreamis=part.getInputStream();if(fileName2.endsWith(".jpg")){Filef=newFile(fileName2);download(f,part);System.out.println("Download Finalizado");}fileName2=null;break;}}}}// Fecha a pastafolder.close(true);// Histório de mensagensstore.close();System.out.println("Terminado");}catch(AuthenticationFailedExceptione){store.close();e.printStackTrace();}catch(FolderClosedExceptione){store.close();e.printStackTrace();}catch(FolderNotFoundExceptione){store.close();e.printStackTrace();}catch(NoSuchProviderExceptione){store.close();e.printStackTrace();}catch(ReadOnlyFolderExceptione){store.close();e.printStackTrace();}catch(StoreClosedExceptione){store.close();e.printStackTrace();}catch(Exceptione){store.close();e.printStackTrace();}}privatevoiddownload(Filef,Partpart)throwsIOException,MessagingException{BufferedOutputStreambos=newBufferedOutputStream(newFileOutputStream(f));byte[]buff=newbyte[2048];InputStreamis=part.getInputStream();intret=0,count=0;while((ret=is.read(buff))>0){bos.write(buff,0,ret);count+=ret;}bos.close();is.close();}
O método que usaria o progress bar seria o download.
E
EdicleoOliveira
Veja bem:
“Como sei que já foi baixado?” :: quando termina o WHILE, seu método já sabe que terminou.
Leia o arquivo destino dentro do bloco WHILE e compare com o original. Faça os cálculos, e então escreva sua ‘barra de progresso’.
F
forever_juba
Isso eu já estava Ligado. O que quero saber é como uso JProgressBar. Entende?
Lucas_Camara
Opa, já tem um tempinho o post. Mas, a sua aplicação é web ou desktop?