Gerar um arquivo txt no cliente

23 respostas
M

Preciso de um help

Criei esse arquivo para salvar um txt na minha maquina no c:\teste, preciso criar um jsp para salvar no cliente, como proceder???

Alguem pode me ajudar.

<%<a class="mention" href="/u/page">@page</a> import=“java.io.File”%>

<%<a class="mention" href="/u/page">@page</a> import=“java.io.FileWriter”%>

<%<a class="mention" href="/u/page">@page</a> import=“java.io.PrintWriter”%>

<%<a class="mention" href="/u/page">@page</a> import=“java.io.FileReader”%>

<%<a class="mention" href="/u/page">@page</a> import=“java.io.BufferedReader”%>

<%<a class="mention" href="/u/page">@page</a> import=“java.lang.String”%>
Untitled Document <% //cria o arquivo teste1.txt com os dados do array String[] dados = {"12345 ","Silva Silva ","[email removido]","9865-8565","Rua Vitória, 523"};
File arq1= new File("c:\\teste.txt");
FileWriter arq = new FileWriter(arq1);
PrintWriter saida = new PrintWriter(arq);

for(int i=0;i<dados.length;i++){
	saida.print(dados[i]);
}


saida.close();
arq.close();

  	
%>

23 Respostas

kinow

Olá Maria Eduarda,

pode falar o que acontece quando executa esse arquivo no cliente???

Att.

F

Boa tarde, acredito que esta operação não é possivel. Pois o navegador não tem permissão para gravar arquivos no micro do cliente, com exceção de arquivos temporários e cookies.

  • Caso seja necessário para a aplicação, para efeito de autenticação automatica ou auto-preenchimento de formulário, eu aconselharia a utilização de cookies [javascript para preenchimento dos campos].

-Caso seja necessário que o usuário possa realizar o download do arquivo, então você poderia direcionar a geração do arquivo no servidor para uma pasta própria da página, possibilitando assim o download por parte do usuário.

eros.stein

Felipefill:
Boa tarde, acredito que esta operação não é possivel. Pois o navegador não tem permissão para gravar arquivos no micro do cliente, com exceção de arquivos temporários e cookies.

  • Caso seja necessário para a aplicação, para efeito de autenticação automatica ou auto-preenchimento de formulário, eu aconselharia a utilização de cookies [javascript para preenchimento dos campos].

-Caso seja necessário que o usuário possa realizar o download do arquivo, então você poderia direcionar a geração do arquivo no servidor para uma pasta própria da página, possibilitando assim o download por parte do usuário.

Exato.
Existe uma série de coisas que não podem ser feitas por applet…
Exemplo, alguns System.getProperty não funcionam em applets. Normalmente tarefas que exigem privilégios do dono da conta para serem executadas, não podem ser realizadas com applets.

Esse trecho foi retirado do site da Sun.

Aqui está um exemplo:

http://java.sun.com/docs/books/tutorial/deployment/applet/properties.html

Olhe em “Forbidden System Properties” e verá que existem propriedades que o applet não tem acesso.

eros.stein

Adição:

Fonte: Wikipedia

Fonte: Sun.

Uma forma de contornar esse problema é usar um servidor como explicado no tutorial a seguir:

http://java.sun.com/docs/books/tutorial/deployment/applet/workaround.html

M

Obrigado pessoal, vou utilizar dessa forma mesmo que mostrei, deu certo o cliente e outro usuario daqui da empresa, apontei o drivei que quero que grava.

Mais vocês não estão livres ainda de mim estou com outro problema, nesse programa ele grava apenas uma linha a proxima ele atualiza e possivel colocar o proximo registro na linha abaixo???

Alguem sabe como posso encrementar esse programa

Grata.

danieldestro

Você pode criar um Applet Java assinado para poder ter permissão de acesso à máquina do cliente.

M

Tentei inserir esse programa completo ele me traz esses erros, alguem pode me ajudar

Error 500: Unable to compile class for JSP An error occurred between lines: 45 and 71 in the jsp file: /arquivo3.jsp Generated servlet error: C:\web\publicidade.metadata.plugins\com.ibm.etools.server.core\tmp0\cache\localhost\server1\publicidadeEAR\publicidade.war_arquivo3.java:186: Incompatible type for constructor. Can’t convert java.io.File to java.lang.String. FileWriter arq = new FileWriter(new File(“c:\teste.txt”),true); ^ An error occurred between lines: 45 and 71 in the jsp file: /arquivo3.jsp Generated servlet error: C:\web\publicidade.metadata.plugins\com.ibm.etools.server.core\tmp0\cache\localhost\server1\publicidadeEAR\publicidade.war_arquivo3.java:207: Method split(java.lang.String) not found in class java.lang.String. dadosprint = c.split(";"); ^ 2 errors

<%<a class="mention" href="/u/page">@page</a> import=“java.io.File”%>

<%<a class="mention" href="/u/page">@page</a> import=“java.lang.String”%>

<%<a class="mention" href="/u/page">@page</a> import=“java.io.FileWriter”%>

<%<a class="mention" href="/u/page">@page</a> import=“java.io.PrintWriter”%>

<%<a class="mention" href="/u/page">@page</a> import=“java.io.FileReader”%>

<%<a class="mention" href="/u/page">@page</a> import=“java.io.BufferedReader”%>

<%
//cria o arquivo teste1.txt com os dados do array
String[] dados = {"56982 ","Maria Aparecida da Silva ",“[email removido]”,“9865-8565”,“Rua Vitória, 523”};

FileWriter arq = new FileWriter(new File("c:\\teste.txt"),true);
PrintWriter saida = new PrintWriter(arq);

for(int i=0;i<dados.length;i++){
	saida.print(dados[i]);
}
saida.println(";");

saida.close();
arq.close();


// ler o arquivo teste1.txt
String[] dadosprint = null;
try {  
    FileReader arqFile = new FileReader("c:\\teste.txt");  
    BufferedReader arqReader = new BufferedReader(arqFile);  
    
    do {  
        String c = arqReader.readLine();  
        if (c == null) break;  
        	dadosprint = c.split(";");
%>

<% for(int i=0;i<dadosprint.length;i++) { %>

<%=dadosprint[i]%> 


<% } %>         		

<%		

}while(true);
arqReader.close();  
	arqFile.close();
 }  
 catch(Exception e) {

%>

"Erro ao trazer informações do arquivo.


<% } %>
kinow

Você criou este JSP e vai rodá-lo na mesma máquina que pretende salvar o arquivo? i.e.: O servidor fica na máquina do cliente? Ou o servidor está em algum local diferente fisicamente do cliente???
:roll:

M

JavaChild

Membro desde: 17/03/2005 14:49:18
Mensagens: 130
Localização: São Paulo
Offline
Você criou este JSP e vai rodá-lo na mesma máquina que pretende salvar o arquivo? i.e.: O servidor fica na máquina do cliente? Ou o servidor está em algum local diferente fisicamente do cliente???

Bom dia

O JSP não vai rodar na mesma maquina que vai vou salvar o arquivo.
O servidor estará em um local diferene.

Você ja fez algo parecido, estou perdida em relação a isso e precisando de uma certa urgencia, voce pode me ajudar???

beijos

Edu

kinow

Claro que sim. Espero conseguir te ajudar.

Agora entendi seu problema. Você realmente não terá permissão para escrever no computador da pessoa remotamente (como dito acima pelos outros participantes do tópico).

Vou pesquisar uma boa forma de você fazer isso.

Há uma opção de enviar o arquivo para o cliente como se ele estivesse fazendo o download do mesmo. Apareceria uma janela com aquelas opções: “Abrir, Salvar, Cancelar”, e o usuário salvaria em algum local do computador. Não é viável fazer isso no cliente?

kinow

A melhor solução parece ser realmente um applet assinado.

http://java.sun.com/sfaq/
http://www.inf.ufrgs.br/procpar/disc/cmp167/trabalhos/sem2001-1/T2/herrmann/

Se precisar podemos bolar uma solução, mas seria necessário montar um código para a solução. Provavelmente o jsp ou servlet que quiser que gere o arquivo e suas dependências. Tente anexar numa mensagem aqui.

Abraços.

M

Kinow

Deixa eu te explicar qual a minha necessidade.

Desenvolvi um formulário que é uma Ordem de Serviço, o departamento preenche esse formulario e grava no banco, em um determinado momento, ele envia essas informações para o financeiro, só que tem que ir em forma de texto, pois lá na outra ponta e um sistema da microsiga que vai le-lo.

Consegui ententer mais ou menos.

Grata pela força.

bjs

kinow

Ótima explicação. Agora entendi.
Hoje na hora do almoço posso tentar fazer um applet que escreve na máquina do cliente. :wink:

M

Kinow

Será que com applet pode rolar???
Preciso conseguir gravar vários linhas em um mesmo arquivo.

Obrigada pela força

Edu

kinow

Estou confiante que sim :slight_smile:

T

Cuidado com applets, mesmo assinados - se ele estiver rodando em IE 7 sob Windows Vista (nas configurações padrão) ele não consegue salvar arquivos em diretórios que sejam acessíveis pelo Windows Explorer de maneira simples. (Em particular, ele não consegue salvar arquivos em um diretório determinado pelo usuário).

O applet é enganado pelo IE7 e Windows Vista através do recurso de “virtualização” - ele acha que gravou no diretório F:\DOWNLOADS (por exemplo, se você estiver usando um pen drive), mas na verdade ele gravou em um diretório C:\USERS&lt;usuario>\LOCALLOW\alguma coisa.

M

Oi, Thingol

Você tem alguma outra solução, que possa me ajudar.

To meio na doideira com esse problema, não sei o que fazer.

o Kinow me deu essa solução do applets ficou de me ajudar.

Grata pela atenção

Edu

bjs

Marcio_Nogueira

Você pode usar cookie, como toda aplicação baseada em web.

kinow

O Cookie funcionaria também, mas ela precisa escrever em um determinado formato o arquivo e encaminhar para outro software. O alerta do thingol é muito importante. Talvez seja melhor buscar mais soluções. Estou pesquisando agora até quase uma da tarde :wink:

kinow

Maria, dê uma olhada nesta solução, me diga se é viável:

<%
//cria o arquivo teste1.txt com os dados do array
String[] dados = {"12345 ","Silva Silva ","[email removido]","9865-8565","Rua Vitória, 523"};

// buffer saída 
StringBuffer output = new StringBuffer();

for(int i=0;i<dados.length;i++){
 output.append(dados[i]);
}
response.setContentType("application/binary");
response.getOutputStream().print(output.toString());
%>

Rode na sua máquina ou na do cliente, e verá uma janela para salvar um arquivo com aquele conteúdo. Você pode até especificar o nome que virá no arquivo. Mas o cliente teria que escolher uma pasta, e depois aquele arquivo que foi gravado seria repassado para o módulo Microsiga.

Att.,
Kinoshita

T

A solução do Kinoshita ( 木下 segundo o Google ) é adequada se o usuário aceitar ter o trabalho de escolher o diretório.

Em 99% dos casos ela seria aceitável, e se você provar ao seu usuário que o IE7 + Windows Vista dão esse problema com applets, então pode mandar bala.

M

Kinow

Tentei gerou esse erro, mas preciso pré definir um local, para gravar o txt.

Error 500: Server caught unhandled exception from servlet [JSP 1.2 Processor]: OutputStream already obtained

T

Esse tipo de coisa ocorre se você já tinha escrito alguma coisa no seu servlet ou JSP. De modo geral, você tem de criar um servlet ou JSP só para gerar o arquivo (não pode ser o mesmo servlet ou JSP que cria um link para esse arquivo).

Criado 19 de novembro de 2007
Ultima resposta 21 de nov. de 2007
Respostas 23
Participantes 7