Em Java, estou criando dinamicamente um conjunto de arquivos e gostaria de alterar as permissões de arquivo nesses arquivos em um sistema de arquivos linux / unix. Eu gostaria de poder executar o equivalente em Java de chmod
. Isso é possível Java 5? Se sim, como?
Eu sei que em Java 6 o File
objeto tem setReadable()
/ setWritable()
métodos. Também sei que posso fazer uma chamada de sistema para fazer isso, mas gostaria de evitar isso, se possível.
java
filesystems
Roy Rico
fonte
fonte
Files.setPosixFilePermissions(path, PosixFilePermissions.fromString("rwxr-x---"))
Respostas:
O controle total sobre os atributos do arquivo está disponível no Java 7, como parte do "novo" recurso New IO ( NIO.2 ). Por exemplo, as permissões POSIX podem ser definidas em um arquivo existente com
setPosixFilePermissions()
, ou atomicamente na criação do arquivo com métodos comocreateFile()
ounewByteChannel()
.Você pode criar um conjunto de permissões usando
EnumSet.of()
, mas o método auxiliarPosixFilePermissions.fromString()
usará um formato convencional que será mais legível para muitos desenvolvedores. Para APIs que aceitam umFileAttribute
, você pode agrupar o conjunto de permissões comPosixFilePermissions.asFileAttribute()
.Em versões anteriores do Java, usar seu próprio código nativo ou
exec
utilitários de linha de comando -ing são abordagens comuns.fonte
Além das sugestões de erickson, há também o jna , que permite chamar bibliotecas nativas sem usar o jni. É surpreendentemente fácil de usar e usei-o em alguns projetos com grande sucesso.
A única ressalva é que ele é mais lento do que jni, portanto, se você estiver fazendo isso com um número muito grande de arquivos, pode ser um problema para você.
(Editando para adicionar exemplo)
Aqui está um exemplo completo de jna chmod:
fonte
Antes do Java 6, não havia suporte para atualização de permissão de arquivo no nível do Java. Você deve implementar seu próprio método nativo ou chamada
Runtime.exec()
para executar um comando de nível de sistema operacional, como chmod .A partir do Java 6, você pode usar
File.setReadable()/File.setWritable()/File.setExecutable()
para definir permissões de arquivo. Mas não simula o sistema de arquivos POSIX, que permite definir permissões para diferentes usuários. File.setXXX () só permite definir permissão para o proprietário e todos os outros.A partir do Java 7, é introduzida a permissão de arquivo POSIX. Você pode definir permissões de arquivo como o que fez nos sistemas * nix. A sintaxe é:
Este método só pode ser usado no sistema de arquivos POSIX, isso significa que você não pode chamá-lo no sistema Windows.
Para obter detalhes sobre o gerenciamento de permissões de arquivos, recomendamos que você leia esta postagem .
fonte
para windows 7 com nio 2.0:
fonte
Se você deseja definir a permissão 777 para o arquivo criado, pode usar o seguinte método:
fonte
Apenas para atualizar esta resposta, a menos que alguém descubra isso mais tarde, já que JDK 6 você pode
você pode encontrar a documentação no arquivo Oracle (Java Platform SE 7) . Lembre-se de que esses comandos só funcionam se o usuário atual tiver propriedade ou acesso de gravação a esse arquivo. Estou ciente de que OP queria acesso do tipo chmod para configurações de usuário mais complexas. isso definirá a opção em todos os níveis para todos os usuários.
fonte
Você pode usar os métodos da classe File: http://docs.oracle.com/javase/7/docs/api/java/io/File.html
fonte
para Oralce Java 6:
funciona em solaris / linux.
fonte
FileSystemPreferences
expande umTimer
thread daemon depois de carregado. ele também adiciona um gancho de desligamento, mas para alguns aplicativos isso ainda pode ser problemático.Crédito do Apache ant chmod (não muito elegante, adicionando-o para integridade) compartilhado com @msorsky
fonte
Referência: como alterar a permissão do arquivo em java
fonte
Há uma classe de exemplo no Oracle Docs que funciona de maneira muito semelhante ao chmod do UNIX. Ele funciona com java se 7+.
fonte
fonte