2014-10-30 10 views
0

Я использую NIO для установки разрешений для всех каталогов по пути, указанному ниже. Я пытаюсь дать 777 разрешений, однако часть «w» не применяется ... Что здесь не так?Разрешения на запись не устанавливаются при использовании NIO в unix

import java.io.File; 
import java.io.IOException; 
import java.nio.file.Files; 
import java.nio.file.Path; 
import java.nio.file.Paths; 
import java.nio.file.attribute.FileAttribute; 
import java.nio.file.attribute.PosixFilePermission; 
import java.nio.file.attribute.PosixFilePermissions; 
import java.util.Set; 

public class permissionTest { 

    public static void main(String [] args) throws IOException{ 

     Path dirPath = Paths.get("./part1/part2/part3"); 


     Set<PosixFilePermission> permissions = PosixFilePermissions.fromString("rwxrwxrwx"); 
     System.out.print(permissions.toString() + ' '); 

     FileAttribute<Set<PosixFilePermission>> fileAttributes = 

       PosixFilePermissions.asFileAttribute(permissions); 

     Files.createDirectories(dirPath, fileAttributes); 

    } 

} 

$ ls -ld part1/ 
drwxr-xr-x 3 * *4096 Oct 30 02:48 part1/ 

ответ

2

Это потому, что применяется umask.

Try и введите в оболочке:

umask 0 

, а затем повторно запустить программу (или запустите ваш IDE из командной строки и запустить код). Это также означает, что если вы umask 027, разрешения для ваших созданных каталогов будет 750.

К сожалению, вы не можете изменить процесс биты полномочий (так как это в процессе, и наследуется) в самой Java ...


Обратите внимание, что существует this method, чтобы установить абсолютные разрешения на файл.

+0

Итак, мы можем сделать chmod -R, но мы не можем сделать то же самое в Java? – nikel

+0

Рекурсивно вы можете изменить разрешения, да. Для этого вам необходимо реализовать ['FileVisitor'] (http://docs.oracle.com/javase/8/docs/api/java/nio/file/FileVisitor.html). – fge

+0

Примечание: поскольку это сообщение я начал реализовывать [это] (https://github.com/fge/java7-fs-more); планируется рекурсивный chmod. Вклады приветствуются! – fge