Manipulando permissões de arquivos em Java

Manipular arquivos em Java é, em geral, uma tarefa simples (a não ser que você tenha que fazer auto-referências de locais: a API Java até hoje não incluiu um método que permitisse buscar a pasta do próprio arquivo automaticamente). Entretanto, muitas vezes nos deparamos com um entrave até meio óbvio: permissões de arquivos.

Para quem trabalha com Linux, alterar permissão de arquivo é dia-a-dia. No Windows, isso já não é tão comum, quase não se mexe nisso, pois o próprio SO controla isso. Como o assunto aqui não é explicar como funciona permissão de arquivos, eu vou deixar um link que conceitua bem o assunto (com relação ao Linux, que trata esse tema de forma mais completa):

http://www.infowester.com/linuxpermissoes.php

Quando precisamos manipular as permissões dos arquivos pelo Java, o que mais se encontra em sistemas por aí é sua manipulação através da classe Runtime, o que tira da aplicação sua portabilidade, já que a linha de comando executada deverá ser diferente para cada sistema operacional.

Assim, utilizar métodos da classe File é, de longe, o mais indicado. No caso, os métodos setReadable, setWritable e setExecutable. Cada um desses métodos contém duas assinaturas: uma, que recebe apenas um boolean, que representa a permissão em si; e outra, que recebe dois booleans, ou seja, um para a permissão e outro que indica se tal permissão deve ser dada apenas ao dono (owner) do arquivo. O conceito de owner pode ser encontrado no link sobre permissões citado acima.

Como em Java não é possível utilizar parâmetros opcionais, a assinatura que possui apenas um boolean como parâmetro é, na realidade, apenas um método de conveniência para o segundo. Entretanto, quando fazemos métodos de conveniência ocultando booleanos, em geral seu padrão é false. Por algum motivo, neste caso, ele tem como padrão o valor true, o que faz com que, em caso de uso, somente o owner do arquivo receba estas permissões.

Portanto, quando você quiser dar permissão a todos os usuários para alteração, leitura e exclusão de um arquivo, você precisará utilizar a segunda assinatura, com o valor false sendo passado como parâmetro, conforme o exemplo abaixo.

File file = new File("arquivo.txt");
file.setReadable(Boolean.TRUE, Boolean.FALSE);
file.setWritable(Boolean.TRUE, Boolean.FALSE);
file.setExecutable(Boolean.TRUE, Boolean.FALSE);

Claro que o Linux permite maior controle das permissões do que apenas as 6 combinações aqui descritas; mas para a grande maioria dos casos, esses métodos atendem, e sem roubar do sistema sua portabilidade.

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s