Java >> Java tutorial >  >> Java

Hvordan ændrer jeg programmæssigt filtilladelser?

Fuld kontrol over filattributter er tilgængelig i Java 7, som en del af den "nye" New IO-facilitet (NIO.2). For eksempel kan POSIX-tilladelser indstilles på en eksisterende fil med setPosixFilePermissions() , eller atomisk ved filoprettelse med metoder som createFile() eller newByteChannel() .

Du kan oprette et sæt tilladelser ved hjælp af EnumSet.of() , men hjælpemetoden PosixFilePermissions.fromString() vil bruger et konventionelt format, der vil være mere læsbart for mange udviklere. For API'er, der accepterer en FileAttribute , kan du ombryde sættet af tilladelser med PosixFilePermissions.asFileAttribute() .

Set<PosixFilePermission> ownerWritable = PosixFilePermissions.fromString("rw-r--r--");
FileAttribute<?> permissions = PosixFilePermissions.asFileAttribute(ownerWritable);
Files.createFile(path, permissions);

I tidligere versioner af Java, ved at bruge din egen indbyggede kode eller exec -ing kommandolinjeværktøjer er almindelige tilgange.


Ud over ericksons forslag er der også jna, som giver dig mulighed for at ringe til indfødte biblioteker uden at bruge jni. Det er chokerende nemt at bruge, og jeg har brugt det på et par projekter med stor succes.

Den eneste advarsel er, at den er langsommere end jni, så hvis du gør dette til et meget stort antal filer, kan det være et problem for dig.

(Redigering for at tilføje eksempel)

Her er et komplet jna chmod eksempel:

import com.sun.jna.Library;
import com.sun.jna.Native;

public class Main {
    private static CLibrary libc = (CLibrary) Native.loadLibrary("c", CLibrary.class);

    public static void main(String[] args) {
        libc.chmod("/path/to/file", 0755);
    }
}

interface CLibrary extends Library {
    public int chmod(String path, int mode);
}

Før Java 6 er der ingen understøttelse af opdatering af filtilladelser på Java-niveau. Du skal implementere din egen indbyggede metode eller ringe til Runtime.exec() for at udføre kommando på OS-niveau såsom chmod .

Fra Java 6 kan du brugeFile.setReadable()/File.setWritable()/File.setExecutable() for at indstille filtilladelser. Men det simulerer ikke POSIX-filsystemet, som gør det muligt at indstille tilladelser for forskellige brugere. File.setXXX() tillader kun at angive tilladelse for ejeren og alle andre.

Fra Java 7 introduceres POSIX-filtilladelse. Du kan indstille filtilladelser som det, du har gjort på *nix-systemer. Syntaksen er:

File file = new File("file4.txt");
file.createNewFile();

Set<PosixFilePermission> perms = new HashSet<>();
perms.add(PosixFilePermission.OWNER_READ);
perms.add(PosixFilePermission.OWNER_WRITE);

Files.setPosixFilePermissions(file.toPath(), perms);

Denne metode kan kun bruges på POSIX-filsystemet, det betyder, at du ikke kan kalde det på Windows-systemet.

For detaljer om administration af filtilladelser, anbefaler du, at du læser dette indlæg.


Java tag