Автор оригинала: mkyong.
В Java мы можем использовать NIO CreateFile()
для назначения разрешения на файл во время создания файла.
package java.nio.file; public static Path createFile(Path path, FileAttribute>... attrs) throws IOException
Но, CreateFile()
не удается назначить разрешение на запись файла в группу файлу в системе Unix?
Path path = Paths.get("/home/mkyong/test/runme.sh"); Setperms = PosixFilePermissions.fromString("rwxrwxrwx"); Files.createFile(path, PosixFilePermissions.asFileAttribute(perms));
$ ls -lsah 0 -rwxr-xr-x 1 mkyong mkyong 0 Jul 20 16:18 runme.sh
Ответ В Java назначьте разрешение на файл во время создания файла, сначала создайте файл, а затем назначьте его разрешение на файл.
Path path = Paths.get("/home/mkyong/test/runme.sh"); Files.createFile(path); Files.setPosixFilePermissions(path, PosixFilePermissions.fromString("rwxrwxrwx"));
1. Разрешение PosixFilePermission. ГРУППОВАЯ ЗАПИСЬ
В этом примере предпринимается попытка назначить разрешение на файл 777 во время создания файла.
package com.mkyong.io.temp; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.attribute.PosixFilePermission; import java.nio.file.attribute.PosixFilePermissions; import java.util.EnumSet; import java.util.Set; public class CreateFile1 { public static void main(String[] args) { try { Path path = Paths.get("/home/mkyong/test/test1.log"); Setperms = EnumSet.of( PosixFilePermission.OWNER_READ, PosixFilePermission.OWNER_WRITE, PosixFilePermission.OWNER_EXECUTE, PosixFilePermission.GROUP_READ, PosixFilePermission.GROUP_WRITE, PosixFilePermission.GROUP_EXECUTE, PosixFilePermission.OTHERS_READ, PosixFilePermission.OTHERS_WRITE, PosixFilePermission.OTHERS_EXECUTE ); Files.createFile(path, PosixFilePermissions.asFileAttribute(perms)); } catch (IOException e) { e.printStackTrace(); } } }
Вывод, создать файл()
не удалось назначить разрешение на запись в файл группы?
$ ls -lsah total 8.0K 4.0K drwxr-xr-x 2 mkyong mkyong 4.0K Jul 20 16:18 . 4.0K drwxr-xr-x 42 mkyong mkyong 4.0K Jul 20 16:06 .. 0 -rwxr-xr-x 1 mkyong mkyong 0 Jul 20 16:18 test1.log
2. posixfilepermissions.из строки (“rwxrwxrwx”)
В этом примере используется PosixFilePermissions.fromString
для назначения разрешения на файл 777 во время создания файла.
package com.mkyong.io.temp; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.attribute.PosixFilePermission; import java.nio.file.attribute.PosixFilePermissions; import java.util.Set; public class CreateTempFile2 { public static void main(String[] args) { try { Path path = Paths.get("/home/mkyong/test/test2.log"); Setperms = PosixFilePermissions.fromString("rwxrwxrwx"); Files.createFile(path, PosixFilePermissions.asFileAttribute(perms)); } catch (IOException e) { e.printStackTrace(); } } }
Выход – Результат тот же; CreateFile()
по-прежнему не может назначить разрешение на запись в файл группы?
$ ls -lsah total 8.0K 4.0K drwxr-xr-x 2 mkyong mkyong 4.0K Jul 20 16:22 . 4.0K drwxr-xr-x 42 mkyong mkyong 4.0K Jul 20 16:06 .. 0 -rwxr-xr-x 1 mkyong mkyong 0 Jul 20 16:18 test1.log 0 -rwxr-xr-x 1 mkyong mkyong 0 Jul 20 16:22 test2.log
3. Сначала Создайте, Назначьте Позже.
Разрешение на файл может быть “переопределено UNIX umask ” (не уверен) во время создания файла.
Чтобы исправить это или получить разрешение на файл desire 777, мы должны сначала создать файл, а затем назначить разрешение на файл.
package com.mkyong.io.temp; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.attribute.PosixFilePermission; import java.nio.file.attribute.PosixFilePermissions; import java.util.Set; public class CreateTempFile3 { public static void main(String[] args) { try { Path path = Paths.get("/home/mkyong/test/test3.log"); /*Setperms = EnumSet.of( PosixFilePermission.OWNER_READ, PosixFilePermission.OWNER_WRITE, PosixFilePermission.OWNER_EXECUTE, PosixFilePermission.GROUP_READ, PosixFilePermission.GROUP_WRITE, PosixFilePermission.GROUP_EXECUTE, PosixFilePermission.OTHERS_READ, PosixFilePermission.OTHERS_WRITE, PosixFilePermission.OTHERS_EXECUTE );*/ Set perms = PosixFilePermissions.fromString("rwxrwxrwx"); Files.createFile(path); Files.setPosixFilePermissions(path, perms); } catch (IOException e) { e.printStackTrace(); } } }
Вывод, наконец, мы можем назначить файлу разрешение на запись в группу.
$ ls -lsah total 8.0K 4.0K drwxr-xr-x 2 mkyong mkyong 4.0K Jul 20 16:27 . 4.0K drwxr-xr-x 42 mkyong mkyong 4.0K Jul 20 16:06 .. 0 -rwxr-xr-x 1 mkyong mkyong 0 Jul 20 16:18 test1.log 0 -rwxr-xr-x 1 mkyong mkyong 0 Jul 20 16:22 test2.log 0 -rwxrwxrwx 1 mkyong mkyong 0 Jul 20 16:27 test3.log
Рекомендации
- JDK-8174893
- PosixFileAttributeView javadoc-файл с атрибутом
- posixfilepermиссии javadoc
- Права доступа к файлам Oracle – POSIX
- Как создать файл на Java
- Примеры umask UNIX
Оригинал: “https://mkyong.com/java/java-unable-to-assign-group-write-permission-to-a-file/”