Ir ao conteúdo
  • Cadastre-se
Lucas  Santos

Programa em java.....

Recommended Posts

Se você for mais específico sobre qual a dúvida fica mais fácil ajudar. Como não foi, fica aqui um Hello Word!

 

public class Hello {
    public static void main(Strin[] args){
        System.out.println("Hello Word!");
    }
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

@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 ... 

Compartilhar este post


Link para o post
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
			}
		}
	}



 

Compartilhar este post


Link para o post
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();

 

Compartilhar este post


Link para o post
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();

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×