Download com o java

9 respostas
F

Ola pessoal. Tudo bom?

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.

:smiley:

9 Respostas

E

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

Que? Para que esse calculo?

E

PORCENTAGEM, CAMARADA, PORCENTAGEM!

F

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

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
public void processMail() throws MessagingException {
		try {
			String servidorPOP3 = "pop.mail.yahoo.com";
			String usuario = "forever_juba";
			String senha = "senha";
				
			Properties props = System.getProperties();
			props.put("mail.pop3.ssl.enable", "true");
			
			Session session = Session.getDefaultInstance(props,null);

			
	
			Store pop = session.getStore("pop3");
			pop.connect(servidorPOP3,usuario, senha);

			Folder folder = pop.getDefaultFolder();
			folder = folder.getFolder("INBOX");
			folder.open(Folder.READ_ONLY);
			messages = folder.getMessages();
			
			for (int messageNumber = 0; messageNumber < messages.length; messageNumber++) {
				message = messages[messageNumber];
				msgObj = message.getContent();

				// Determine o tipo de email
				if (msgObj instanceof Multipart) {

					
					multipart = (Multipart) message.getContent();

					for (int i = 0; i < multipart.getCount(); i++) {

						part = multipart.getBodyPart(i);
						// pegando um tipo do conteúdo
						contentType = part.getContentType();

						String fileName2 = part.getFileName();
						if(fileName2 != null) {
							System.out.println(messageNumber + " " + fileName2 + " | " + message.getSubject());
							InputStream is = part.getInputStream();
							if(fileName2.endsWith(".jpg")){
								File f = new File(fileName2);
								download(f,part);
								System.out.println("Download Finalizado");
							}							
							fileName2 = null;
							break;
					   }
					}
				} 
			}
			// Fecha a pasta
			folder.close(true);
			// Histório de mensagens
			store.close();
			System.out.println("Terminado");
		} catch (AuthenticationFailedException e) {
			store.close();
			e.printStackTrace();
		} catch (FolderClosedException e) {
			store.close();
			e.printStackTrace();
		} catch (FolderNotFoundException e) {
			store.close();
			e.printStackTrace();
		} catch (NoSuchProviderException e) {
			store.close();
			e.printStackTrace();
		} catch (ReadOnlyFolderException e) {
			store.close();
			e.printStackTrace();
		} catch (StoreClosedException e) {
			store.close();
			e.printStackTrace();
		} catch (Exception e) {
			store.close();
			e.printStackTrace();
		}
	}

	private void download(File f, Part part) throws IOException, MessagingException{
		BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(f));
		byte[] buff = new byte[2048];
		InputStream is = part.getInputStream();
		int ret = 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

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

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?

abraços

Criado 8 de fevereiro de 2011
Ultima resposta 6 de abr. de 2011
Respostas 9
Participantes 3