Implementando permissão de arquivo

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.

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.

[quote=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.

[/quote]

[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]

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.

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

Muito obrigada pela ajuda!

deu certo!!!