En Java, je crée dynamiquement un ensemble de fichiers et j'aimerais modifier les autorisations de fichiers sur ces fichiers sur un système de fichiers linux / unix. J'aimerais pouvoir exécuter l'équivalent Java de chmod
. Est-ce possible Java 5? Si c'est le cas, comment?
Je sais que dans Java 6 l' File
objet a setReadable()
/ setWritable()
methods. Je sais aussi que je pourrais faire un appel système pour ce faire, mais j'aimerais éviter cela si possible.
java
filesystems
Roy Rico
la source
la source
Files.setPosixFilePermissions(path, PosixFilePermissions.fromString("rwxr-x---"))
Réponses:
Le contrôle total des attributs de fichier est disponible dans Java 7, dans le cadre de la «nouvelle» fonction New IO ( NIO.2 ). Par exemple, les permissions POSIX peuvent être définies sur un fichier existant avec
setPosixFilePermissions()
, ou atomiquement lors de la création de fichiers avec des méthodes telles quecreateFile()
ounewByteChannel()
.Vous pouvez créer un ensemble d'autorisations à l'aide de
EnumSet.of()
, mais la méthode d'assistancePosixFilePermissions.fromString()
utilisera un format conventionnel qui sera plus lisible pour de nombreux développeurs. Pour les API qui acceptent aFileAttribute
, vous pouvez encapsuler l'ensemble d'autorisations avec avecPosixFilePermissions.asFileAttribute()
.Dans les versions antérieures de Java, l'utilisation de votre propre code natif ou les
exec
utilitaires de ligne de commande -ing sont des approches courantes.la source
En plus des suggestions d'erickson, il y a aussi jna , qui vous permet d'appeler des bibliothèques natives sans utiliser jni. Il est incroyablement facile à utiliser et je l'ai utilisé sur quelques projets avec beaucoup de succès.
Le seul inconvénient est qu'il est plus lent que jni, donc si vous faites cela à un très grand nombre de fichiers, cela pourrait être un problème pour vous.
(Modification pour ajouter un exemple)
Voici un exemple complet de jna chmod:
la source
Avant Java 6, il n'y avait pas de prise en charge de la mise à jour des autorisations de fichiers au niveau Java. Vous devez implémenter votre propre méthode native ou appeler
Runtime.exec()
pour exécuter une commande au niveau du système d'exploitation telle que chmod .À partir de Java 6, vous pouvez utiliser
File.setReadable()/File.setWritable()/File.setExecutable()
pour définir les autorisations de fichier. Mais il ne simule pas le système de fichiers POSIX qui permet de définir des autorisations pour différents utilisateurs. File.setXXX () permet uniquement de définir l'autorisation pour le propriétaire et tout le monde.À partir de Java 7, l'autorisation de fichier POSIX est introduite. Vous pouvez définir des autorisations de fichiers comme ce que vous avez fait sur les systèmes * nix. La syntaxe est:
Cette méthode ne peut être utilisée que sur le système de fichiers POSIX, cela signifie que vous ne pouvez pas l'appeler sur le système Windows.
Pour plus de détails sur la gestion des autorisations de fichiers, nous vous recommandons de lire cet article .
la source
pour Windows 7 avec nio 2.0:
la source
Si vous souhaitez définir l'autorisation 777 sur votre fichier créé, vous pouvez utiliser la méthode suivante:
la source
Juste pour mettre à jour cette réponse à moins que quelqu'un ne rencontre cela plus tard, depuis JDK 6, vous pouvez utiliser
vous pouvez trouver la documentation sur Oracle File (Java Platform SE 7) . Gardez à l'esprit que ces commandes ne fonctionnent que si l'utilisateur actif actuel a la propriété ou un accès en écriture à ce fichier. Je suis conscient qu'OP voulait un accès de type chmod pour une configuration utilisateur plus complexe. ceux-ci définiront l'option à tous les niveaux pour tous les utilisateurs.
la source
Vous pouvez utiliser les méthodes de la classe File: http://docs.oracle.com/javase/7/docs/api/java/io/File.html
la source
pour Oralce Java 6:
fonctionne sous solaris / linux.
la source
FileSystemPreferences
spwans unTimer
thread démon une fois qu'il est chargé. il ajoute également un hook d'arrêt, mais pour certaines applications, cela peut encore être problématique.Apache ant chmod (pas très élégant, en l'ajoutant pour être complet) crédit partagé avec @msorsky
la source
Référence: comment changer l'autorisation de fichier en java
la source
Il existe un exemple de classe sur Oracle Docs qui fonctionne très similaire au chmod UNIX. Cela fonctionne avec java se 7+.
la source
la source