Класс Java File имеет возможность установить права доступа к файлам, но он не является универсальным. Самый большой его недостаток в том, что вы можете разделить права доступа к файлам только на два типа пользователей — на владельца и на всех остальных. Вы не можете установить различные права доступа к файлам для группы или других пользователей.
Начиная с Java 7 был введен PosixFilePermission
Enum и java.nio.file.Files
включая метод setPosixFilePermissions(Path path, Set perms)
, которые могут быть использованы для установки прав доступа к файлам.
Вот простая программа, которая наглядно показывает преимущества PosixFilePermission
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
package ua.com.prologistic; import java.io.File; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; import java.nio.file.attribute.PosixFilePermission; import java.util.HashSet; import java.util.Set; public class FilePermissions { public static void main(String[] args) throws IOException { File file = new File("/Users/prologistic/temp.txt"); // устанавливаем права доступа для пользователей 455 file.setExecutable(false); file.setReadable(false); file.setWritable(true); // изменяем права доступа для всех пользователей на 777 // без использования групп и других пользователей file.setExecutable(true, false); file.setReadable(true, false); file.setWritable(true, false); //используем PosixFilePermission для установки прав на 777 Set<PosixFilePermission> perms = new HashSet<PosixFilePermission>(); // добавляем разрешения для владельца perms.add(PosixFilePermission.OWNER_READ); perms.add(PosixFilePermission.OWNER_WRITE); perms.add(PosixFilePermission.OWNER_EXECUTE); //добавляем разрешения для группы perms.add(PosixFilePermission.GROUP_READ); perms.add(PosixFilePermission.GROUP_WRITE); perms.add(PosixFilePermission.GROUP_EXECUTE); //добавляем разрешения для всех остальных perms.add(PosixFilePermission.OTHERS_READ); perms.add(PosixFilePermission.OTHERS_WRITE); perms.add(PosixFilePermission.OTHERS_EXECUTE); Files.setPosixFilePermissions(Paths.get("/Users/prologistic/run.sh"), perms); } } |
Очевидно, использование PosixFilePermission
предоставляет намного больше возможностей и делает код более читабельным. Если вы используете Java 7, то очень желательно использовать именно его для установления прав доступа к файлам в Java.