Olá tive ausente durante um tempo mais pretendo voltar a postar mais frequentemente e coisa melhores, hoje venho postar sobre como fazer download de arquivos do servidor.
Fiz uma implementação em dois sabores onde você pode baixar que é o que o código principal faz ou visualizar no browser que a tag outputlink ja faz o trabalho duro.
O código está fácil de entender e comentado por isso não vou explicar muita coisa, tem que saber um pouquinho de IO para não se perder.
Até a próxima. Download projeto no netbeans está com extensão ppt (por que wordpress não permite fazer upload de arquivo zip) mais é so renomear para zip e descompactar.
Disposição dos arquivos
———————————–
package com.wordpress.brunodanielmarinho;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.OutputStream;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletResponse;
@ManagedBean
@RequestScoped
public class DonwloadFile {
public String download() {
//O primeiro parametro é o nome do arquivo que aparece para o usuario no download pode ser qualquer um.
downloadFile("teste.txt", "/teste/text.txt");
return "";
}
public String downloadFile(String nomeDoArquivoGeradoParaDownload, String caminhoRelativoComNomeEextensao) {
ExternalContext context = FacesContext.getCurrentInstance().getExternalContext();
ServletContext servletContext = (ServletContext) context.getContext();
//Obtem o caminho para o arquivo e efetua a leitura
byte[] arquivo = readFile(new File(servletContext.getRealPath("") + caminhoRelativoComNomeEextensao));
HttpServletResponse response =(HttpServletResponse) context.getResponse();
//configura o arquivo que vai voltar para o usuario.
response.setHeader("Content-Disposition","attachment;filename=\"" + nomeDoArquivoGeradoParaDownload + "\"");
response.setContentLength(arquivo.length);
//isso faz abrir a janelinha de download
response.setContentType("application/download");
//envia o arquivo de volta
try {
OutputStream out= response.getOutputStream();
out.write(arquivo);
out.flush();
out.close();
FacesContext.getCurrentInstance().responseComplete();
} catch (IOException e) {
System.out.print("Erro no envio do arquivo");
e.printStackTrace();
}
return "";
}
//efetua a leitura do arquivo
public static byte[] readFile(File file) {
int len = (int) file.length();
byte[] sendBuf = new byte[len];
FileInputStream inFile = null;
try {
inFile = new FileInputStream(file);
inFile.read(sendBuf, 0, len);
} catch (FileNotFoundException e) {
System.out.print("Arquivo não encontrado");
e.printStackTrace();
} catch (IOException e) {
System.out.print("Erro na leitura do arquivo");
e.printStackTrace();
}
return sendBuf;
}
}

Funciono
+ ele abre o arquivo na mesma janela, como faz pra faze download?
Isso depende do browser.
Essa parte response.setContentType(“application/download”); diz que é para fazer o download so que se o seu browser estiver configurado para abrir ele vai abrir.
Olá Bruno, encontrei seu blog e vi que vc conhece muito java. Eu sei um pouco, desenvolvo mais em cobol. Estou buscando uma aplicação que faça essa comunicação entre o java e o cobol. Eu nao sei que é necessario instalar eu sempre usei o eclipse e o tomcat, vc sabe se há mais algum componente a ser instalado! ??
Procura por JCA voce tem fazer um conector do java pro cobol tavez ja tenha na net.
Bruno, à algum tempo leio o seu blog e tenho notado que você tem um amplo conhecimento de Java e de TI em geral, eu tenho uma pequena empresa com alguns desenvolvedores trabalhando com VB e gostaria de iniciar alguns projetos em Java aqui na empresa, mas nossos desenvolvedores não tem o mínimo conhecimento em Java, eu gostaria de saber se você tem interesse em ministrar uma palestra para nossos desenvolvedores, se tiver interesse podemos conversar sobre valores.
Obrigado.
Onde fica sua empresa?
Fica em São Paulo, na região da Berrini.
Me manda um email acho que da sim, eu pego fretado na berrini quase todo dia.