Implementando permissão de arquivo  XML
Índice dos Fóruns » Desenvolvimento Web
Autor Mensagem
VeraApFigueiredo
JavaChild

Membro desde: 14/12/2008 16:00:39
Mensagens: 133
Offline

Bom dia pessoal,


To fazendo a criação de um arquivo .txt , usando o BufferedWriter .


BufferedWriter ArquivoTXT = new BufferedWriter(new FileWriter(caminhoArquivo));

Porém preciso passar a permissão para gravar esse arquivo, no caso (chmod 777)

Alguém sabe como posso passar essa permissão para criação do arquivo?

Muito obrigada.



thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

Você não pode fazer isso diretamente via Java. Você terá de criar o tal arquivo, fechá-lo, e então chamar o comando do Unix (chmod) através de Runtime.exec.

(Há a opção de usar JNA e chamar a API do Unix "chmod", mas eu não aconselharia usar JNA em uma aplicação Web, já que o uso de JNI e/ou JNA deixa seu web container - como o Tomcat - muito mais instável.)

Isso deve mudar com o Java 7, mas enquanto isso não ocorre, você terá de fazer isso mesmo. Sorry.
[WWW]
Metaleiro
Virtual Machine Man
[Avatar]

Membro desde: 06/07/2006 10:55:54
Mensagens: 669
Localização: São Bernardo do Campo - SP
Offline

VeraApFigueiredo wrote:Bom dia pessoal,


To fazendo a criação de um arquivo .txt , usando o BufferedWriter .


BufferedWriter ArquivoTXT = new BufferedWriter(new FileWriter(caminhoArquivo));

Porém preciso passar a permissão para gravar esse arquivo, no caso (chmod 777)

Alguém sabe como posso passar essa permissão para criação do arquivo?

Muito obrigada.






Não sei se funciona, mas você pode tentar usar o comando :



Esse seria o comando, é só passar a sintaxe correta que você passaria para o shell

"Why, Mr. Anderson? Why do you do it? Why get up? Why keep fighting? Do you believe you're fighting for something? For more than your survival? Can you tell me what it is? Do you even know? Is it freedom? Or truth? Perhaps peace? Yes? No? Could it be for love? Illusions, Mr. Anderson. Vagaries of perception. The temporary constructs of a feeble human intellect trying desperately to justify an existence that is without meaning or purpose. And all of them as artificial as the Matrix itself, although only a human mind could invent something as insipid as love. You must be able to see it, Mr. Anderson. You must know it by now. You can?t win. It?s pointless to keep fighting. Why, Mr. Anderson? Why? Why do you persist?"

Neo :
-Because is my choice

VeraApFigueiredo
JavaChild

Membro desde: 14/12/2008 16:00:39
Mensagens: 133
Offline

Bom dia thingol

Será que você poderia dar uma olhada no meu código e me dizer onde se encaixa isso?

// Gerando o arquivo .txt contendo as informacoes da oficializacao
String conteudo = nomeVersao + " #" + dataatual + " => " + horaatual + " #ADSC:" + nomeBI + " #" + atividade;

String caminhoArquivo = "/home/users/tatianam/temp_oficializa/caderno/" + nomeVersao;

try {

File f = new File(caminhoArquivo); // isto não cria um novo arquivo, apenas um objeto que gerencia algumas informações sobre um nome de arquivo
if (!f.exists()) {
//Se caso o arquivo não existir cria o arquivo.txt
BufferedWriter ArquivoTXT = new BufferedWriter(new FileWriter(caminhoArquivo));
Runtime.getRuntime().exec("chmod 777" + ArquivoTXT);
}
// o true significa q o arquivo será constante
FileWriter x = new FileWriter(caminhoArquivo, true);

conteudo += "\n\r"; // criando nova linha e recuo no arquivo
x.write(conteudo); // armazena o texto no objeto x, que aponta para o arquivo
x.close(); // cria o arquivo
}
// em caso de erro apresenta mensagem abaixo
catch (Exception e) {
info("O arquivo não foi gravado");
}

return "AvisoControle";
}


to passando dessa forma, mas não está funcionando.

Muito obrigada.
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

Cuidado com os espaços! Seu comando ficou como

chmod 777/home/users/tatianam/temp_oficializa/caderno/blablabla...

O chmod não sabe separar o número do nome do arquivo, portanto ele não funcionou.

Dica número um: nunca use a versão do Runtime.exec que aceita apenas um parâmetro. Use aquela que requer um array de strings, contendo os componentes do comando. É que a versão do Runtime.exec que aceita apenas um parâmetro é muito sujeita aos seguintes problemas:
a) Esse tipo de coisa que você fez (se confundir com os espaços);
b) Argumentos com espaços (por exemplo, um nome de arquivo com espaços no meio) também dá problemas
[WWW]
VeraApFigueiredo
JavaChild

Membro desde: 14/12/2008 16:00:39
Mensagens: 133
Offline

Muito obrigada pela ajuda!

deu certo!!!
 
Índice dos Fóruns » Desenvolvimento Web
Ir para:   
Powered by JForum 2.1.8 © JForum Team