Dúvida sobre acesso a arquivo txt!

7 respostas
Grinvon

No sistema que trabalho, desenvolvi uma rotina para pegar algumas informações do banco e exportar para um arquivo txt. O problema é que o arquivo fica no servidor, eu queria que o usuário pode-se escolher onde o arquivo deve ser instalado, abrindo assim uma caixa onde ele pode abrir ou salvar o arquivo, essa caixa é muito comum no windows, porém não consigo fazer isso, ele sempre exporta de vez para o server. Existe alguma maneira pausível de se fazer tal coisa?

7 Respostas

L

Você está utilizando qual estrutura?
RMI…Servlets/JSP…etc

Dê mais informações sobre a arquitetura do seu sistema para podermos te ajudar… ok???

Grinvon

leonardodaniel:
Você está utilizando qual estrutura?
RMI…Servlets/JSP…etc

Dê mais informações sobre a arquitetura do seu sistema para podermos te ajudar… ok???

O problema é esse, por ser em um ambiente WEB, ou seja servlet e JSP. Se fosse em um ambiente desktop isso seria ridículo.

Eu consegui fazer as rotinas de exportação, ou seja, consigo obter do banco e jogar os dados em arquivo txt, o problema é abrir essa caixa do qual o usuário tenha a possibilidade de salvar localmente!

E

bom, eu nao me lembro mto de programacao web, era do tempo do php hehe, mas acho q se vc setasse algum cabeçalho http ou algo do tipo indicando transferencia do arquivo, aparecia a janela padrao do browser de download de arquivos, acho que é isso que voce quer…

T

Isso é meio enjoado - você pode até tentar setar o content-type para algo tipo “application/octet-stream” e o browser vai tentar visualizar, como se fosse um arquivo texto tradicional.
Para forçar a barra, você pode setar o content-type para “application/x-naoexiste-programa” ou alguma outra coisa que comece com X, e que sabidamente não exista um “handler” para ele, para que force o download como se fosse um arquivo binário e abra a tal caixa para que o usuário salve o arquivo.
Cuidado! se for https (SSL) em vez de http pode dar algum problema com controle de cache. (Resumindo, no caso https, você pode baixar o arquivo, mas você deve fazer duas coisas:

  • Não pode dizer aquelas coisas do tipo “pragma:nocache” - senão você nem consegue salvar o arquivo;
  • Para evitar problemas de cache, baixe o arquivo sempre com um nome diferente.
Grinvon

Estou tentando fazer dessa forma! Mas agora fica salvando o conteudo da html

pageContext.getResponse().setContentType("application/octet-stream");
        ((HttpServletResponse) pageContext.getResponse()).addHeader("content-disposition",
        "attachment; filename=Exportar.txt");
        
        new TXTWriter(pageContext.getResponse().getOutputStream(),col);

A classe TXTWriter é a classe de exportacao que eu criei, ela recebe dois parametros, um a string do caminho do arquivo e o outro a colecao de dados!

Agora dentro da classe TXTWriter estou usando um WriteFile para escrever o arquivo

out = new BufferedWriter(new FileWriter(sCaminho));

Mas acho que terei que alterar alguma coisa para receber o OutputServletStream

Grinvon

Galera, segue abaixo o meu método que faz a exportação para TXT, o problema é que ele gera o HTML da página que tem o contexto e não gerá do arquivo que eu criei.

private void lerTXT() 
    {
        try 
        {
            
            File arquivo = new File(filename);
            
            BufferedReader br = new BufferedReader(new FileReader(arquivo));
            String str = "";

            response = (HttpServletResponse) pageContext.getResponse();
            response.setContentType("application/download"); //application/text
            response.addHeader("content-disposition","attachment; filename=exportar.txt"); //attachment
            
            ServletOutputStream os = response.getOutputStream();
            PrintWriter  pw = new PrintWriter(os);
            
            while((str = br.readLine()) != null) 
            {
                System.out.println(str);
                pw.write(str);
            }
              
        } catch (Exception ex) 
        {
            ex.printStackTrace();
        } 
        
    }
Grinvon

Se eu utilizar…

PrintWriter pw = response.getWriter():

Obtenho a seguinte exception

java.lang.IllegalStateException: OutputStream already retrieved

Criado 10 de maio de 2005
Ultima resposta 10 de mai. de 2005
Respostas 7
Participantes 4