Ir ao conteúdo
  • Cadastre-se

Programa em java.....


Posts recomendados

Certo. Vamos lá:

 

public void salvarArquivo(String link){
	InputStream is = null;
	OutputStream os = null;
	try{
		//Monta o objeto URL
		URL url = new URL(link);
		//Abre o Stream de entrada e guarda os bytes
		is = url.openStream();
		byte[] buffer = new byte[is.available()];
		//Cria o link com um arquivo em disco
		File arquivoBaixado = new File("download.tmp");
		//Cria o Stream de saída
		os = new FileOutputStream(arquivoBaixado);
		//Grava os dados no arquivo via Stream
		os.write(buffer);
	}catch (Exception e){
		e.printStackTrace();
	}finally{
		//Fecha os streams abertos
		try{
			if (is != null) {
				is.close();
			}
			if (os != null) {
				os.close();
			}
		}catch(Exception e){
			//Não faz nada
		}
	}
}


 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • 3 semanas depois...

@Lucas Santos
Danificados como? Poderia ser mais específico?

PS.: Veja, ali no código eu dei um exemplo de como fazer o download ... mas preste atenção nessa linha:
 

//Cria o link com um arquivo em disco
File arquivoBaixado = new File("download.tmp");

Nesse caso, você teria que substituir o 'download.tmp' pelo nome real do arquivo ... 

Link para o comentário
Compartilhar em outros sites

@Lucas Santos
Descobri ... falha grotesca minha ... como trabalho sempre com streaming, esqueci que para filesystem o buffer é de 1024 bytes ... vai o código novamente

 

	public void salvarArquivo(String link){
		InputStream is = null;
		OutputStream os = null;
		try{
			//Monta o objeto UR	public void salvarArquivo(String link){
		InputStream is = null;
		OutputStream os = null;
		try{
			//Monta o objeto URL
			URL url = new URL(link);
			//Abre o Stream de entrada e guarda os bytes
			is = url.openStream();
			byte[] buffer = new byte[1024];
			//Cria o link com um arquivo em disco
			File arquivoBaixado = new File("download.tmp");
			//Cria o Stream de saída
			os = new FileOutputStream(arquivoBaixado);
			//Grava os dados no arquivo via Stream
			int count;
			while ((count = is.read(buffer, 0, 1024)) != -1) {
				os.write(buffer, 0, count);
			}
		}catch (Exception e){
			e.printStackTrace();
		}finally{
			//Fecha os streams abertos
			try{
				if (is != null) {
					is.close();
				}
				if (os != null) {
					os.close();
				}
			}catch(Exception e){
				//Não faz nada
			}
		}
	}



 

Link para o comentário
Compartilhar em outros sites

O codigo ta fazendo download mais o outro arquivo ta vindo corrompido

codigo:

public class download implements Listener {
	public static void salvarArquivo(){
		try{
			//Monta o objeto UR	public void salvarArquivo(String link){
		InputStream is = null;
		OutputStream os = null;
		try{
			//Monta o objeto URL
			URL url = new URL("http://www.NaoPossoDeixaOsite.com/Programar.jar");
			//Abre o Stream de entrada e guarda os bytes
			is = url.openStream();
			byte[] buffer = new byte[1024];
			//Cria o link com um arquivo em disco
			File arquivoBaixado = new File("plugins/download.jar");
			//Cria o Stream de saída
			os = new FileOutputStream(arquivoBaixado);
			//Grava os dados no arquivo via Stream
			int count;
			while ((count = is.read(buffer, 0, 1024)) != -1) {
				os.write(buffer, 0, count);
			}
		}catch (Exception e){
			e.printStackTrace();
		}
		finally{
			//Fecha os streams abertos
			try{
				if (is != null) {
					is.close();
				}
				if (os != null) {
					os.close();
				}
			}catch(Exception e){
				//Não faz nada
			}
		}
	}catch (Exception e){
			e.printStackTrace();
		}
	}
}
	

Foto do erro:

 

Desktop 25-08-2016 17-11-50-26.png

adicionado 2 minutos depois

@psykotico

Eu nao sei se pode ser o jeito que eu estou chamando a funçao aqui o codigo:

download clazze = new download();
download.salvarArquivo();

 

Link para o comentário
Compartilhar em outros sites

Bem, aqui funcionou corretamente o download utilizando o seu próprio código ... mas acho que descobri o motivo ... você está tentando abrir o arquivo com o programa ainda em execução, correto??

Se for esse o caso, no final do finally, adicione o comando:

 

System.gc();

Isso teoricamente força a JVM a passar o Garbage Collector (Lembrando que o GC é controlado pela JVM, que pode atrasar a execução do comando a bel prazer). A JVM demora um pouco para excluir da memória os objetos. Com isso, o link do arquivo fica ligado ao Java, não permitindo que o mesmo seja utilizado em outro local ...

Bug reportado no site da Oracle

PS: Por convenção, aconselho a usar o nome das Classes sempre iniciando com letra maiúscula ... 

Ex:
Download clazze = new Download();

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...