web-dev-qa-db-fra.com

java définissez les autorisations de fichier sur 777 lors de la création d'un objet fichier

Duplicata possible:
Comment puis-je définir le umask depuis Java?

Comment définissez-vous les autorisations de fichier sur 777 (ou toute autre autorisation arbitraire) lors de la création d'un objet fichier en java?

14
Abhishek

Si vous définissez la umask(2) sur 0 Avant de démarrer la JVM, tous les fichiers et répertoires créés seront créés avec des autorisations complètes pour tout le monde. C'est probablement une mauvaise idée.

Vous pouvez utiliser les API File.setReadable() , File.setWritable pour jouer avec les bits de mode une fois le fichier créé. C'est souvent suffisant, si vous accordez des autorisations; si vous essayez de supprimer les autorisations des autres utilisateurs, vos autorisations devraient probablement être définies de manière très restrictive dès le début. (umask(0777) avant de lancer la JVM, puis ajoutez les autorisations exactement où vous les voulez.)

15
sarnold

3 méthodes sont disponibles:

setReadalble (booléen booléen)
setWritable (boolean, boolean)
setExecutable (boolean, boolean)

Cela définira le fichier sur "0777"

String path = "SOME/PATH";

final File file = new File(path);
file.setReadable(true, false);
file.setExecutable(true, false);
file.setWritable(true, false);
22
ratchet freak

Java SE 7 a Java.nio.file.attribute.PosixFileAttributes qui vous donne un contrôle précis sur les autorisations de lecture, d'écriture et d'exécution pour le propriétaire, le groupe et les autres.

import Java.nio.file.*;
import Java.nio.file.attribute.*;
import Java.util.Set;

public class Test {
    public static void main(String[] args) throws Exception {
        Path path = Paths.get("/tmp/test-file.txt");
        if (!Files.exists(path)) Files.createFile(path);
        Set<PosixFilePermission> perms = Files.readAttributes(path,PosixFileAttributes.class).permissions();

        System.out.format("Permissions before: %s%n",  PosixFilePermissions.toString(perms));

        perms.add(PosixFilePermission.OWNER_WRITE);
        perms.add(PosixFilePermission.OWNER_READ);
        perms.add(PosixFilePermission.OWNER_EXECUTE);
        perms.add(PosixFilePermission.GROUP_WRITE);
        perms.add(PosixFilePermission.GROUP_READ);
        perms.add(PosixFilePermission.GROUP_EXECUTE);
        perms.add(PosixFilePermission.OTHERS_WRITE);
        perms.add(PosixFilePermission.OTHERS_READ);
        perms.add(PosixFilePermission.OTHERS_EXECUTE);
        Files.setPosixFilePermissions(path, perms);

        System.out.format("Permissions after:  %s%n",  PosixFilePermissions.toString(perms));
    }
}

Qui peut ensuite être utilisé comme:

$ rm -f /tmp/test-file.txt && javac Test.Java && Java Test
Permissions before: rw-r--r--
Permissions after:  rwxrwxrwx
15