Implementando permissão de arquivo

5 respostas
V

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.

5 Respostas

T

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.

Metaleiro

VeraApFigueiredo:
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.

[color=darkblue] Não sei se funciona, mas você pode tentar usar o comando :[/color]

Runtime.getRuntime().exec("chmod 777 seu_arquivo");

[color=darkblue] Esse seria o comando, é só passar a sintaxe correta que você passaria para o shell[/color]

V

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.

T

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

V

Muito obrigada pela ajuda!

deu certo!!!

Criado 16 de julho de 2009
Ultima resposta 16 de jul. de 2009
Respostas 5
Participantes 3