Spec-Zone.ru › OpenJDK 24

Модуль jdk.zipfs

модуль jdk.zipfs
Предоставляет реализацию поставщика файловой системы ZIP. Поставщик файловой системы ZIP обрабатывает содержимое файла ZIP или JAR как файловую систему.

Доступ к файловой системе ZIP

Методы статической фабрики FileSystems newFileSystem могут быть использованы для:
  • Создание файловой системы ZIP
  • Открытие существующего файла как файловой системы ZIP
Поставщик файловой системы ZIP не поддерживает открытие существующего файла ZIP, содержащего записи с "." или ".." в элементах своих имён.

Схему URI для идентификации файловой системы ZIP

URI scheme, идентифицирующий файловую систему ZIP, это jar.

Атрибуты файлов POSIX

Файловая система ZIP поддерживает атрибут файла view с именем "zip", который определяет следующий атрибут файла:
Поддерживаемые атрибуты
Имя Тип
разрешения Set<PosixFilePermission>
Атрибут "разрешения" — это набор разрешений доступа, которые необязательно хранятся для записей в файле ZIP. Значение атрибута равно null для записей, не имеющих разрешений доступа. Файловые системы ZIP не применяют разрешения доступа.

Атрибут "разрешения" можно читать и устанавливать с помощью методов Files.getAttribute и Files.setAttribute. Следующий пример использует эти методы для чтения и установки атрибута:

 
     Set<PosixFilePermission> perms = Files.getAttribute(entry, "zip:permissions");
     if (perms == null) {
         perms = PosixFilePermissions.fromString("rw-rw-rw-");
         Files.setAttribute(entry, "zip:permissions", perms);
     }
  

В дополнение к представлению "zip", файловая система ZIP необязательно поддерживает PosixFileAttributeView ("posix"). Это представление расширяет представление "basic" с безопасным по типу доступом к атрибутам owner, group-owner и permissions. Представление "posix" поддерживается только тогда, когда файловая система ZIP создаётся с свойством поставщика "enablePosixFileAttributes" установленным в "true". Следующий код создаёт файловую систему с этим свойством и считывает разрешения доступа к файлу:

 
     var env = Map.of("enablePosixFileAttributes", "true");
     try (FileSystem fs = FileSystems.newFileSystem(file, env) {
         Path entry = fs.getPath("entry");
         Set<PosixFilePermission> perms = Files.getPosixFilePermissions(entry);
     }
  

Атрибуты владельца файла и владельца группы не сохраняются, то есть не хранятся в файле ZIP. Свойства поставщика "defaultOwner" и "defaultGroup" (перечисленные ниже) могут быть использованы для настройки значений по умолчанию для этих атрибутов. Если эти свойства не установлены, то владелец файла по умолчанию устанавливается как владелец файла ZIP, а владелец группы по умолчанию устанавливается как владелец группы файла ZIP (или владелец файла на платформах, не поддерживающих владельца группы).

Атрибут "permissions" является обязательным в представлении "posix", поэтому для записей, не имеющих разрешений доступа, хранящихся в файле ZIP, используется набор разрешений по умолчанию. Набор разрешений по умолчанию:

  • OWNER_READ
  • OWNER_WRITE
  • GROUP_READ
Разрешения по умолчанию можно настроить с помощью свойства "defaultPermissions", описанного ниже.

Свойства файловой системы ZIP

При создании файловой системы Zip могут быть указаны следующие свойства:
Настраиваемые свойства, которые могут быть указаны при создании новой файловой системы ZIP
Имя свойства Тип данных Значение по умолчанию Описание
create String или Boolean false Если значение равно true, поставщик файловой системы ZIP создаёт новый файл ZIP или JAR, если он не существует.
encoding String UTF-8 Значение указывает схему кодирования для имён записей в файле ZIP или JAR.
enablePosixFileAttributes String или Boolean false Если значение равно true, файловая система ZIP будет поддерживать PosixFileAttributeView.
defaultOwner UserPrincipal
или String
null/unset Переопределить владельца по умолчанию для записей в файловой системе ZIP.
Значение может быть UserPrincipal или строковым значением, которое используется как имя UserPrincipal.
defaultGroup GroupPrincipal
или String
null/unset Переопределить группу по умолчанию для записей в файловой системе ZIP.
Значение может быть GroupPrincipal или строковым значением, которое используется как имя GroupPrincipal.
defaultPermissions Set<PosixFilePermission>
или String
null/unset Переопределить набор разрешений по умолчанию для записей в файловой системе ZIP.
Значение может быть Set<PosixFilePermission> или
строкой, анализируемой с помощью PosixFilePermissions::fromString
compressionMethod String "DEFLATED" Значение, представляющее метод сжатия, используемый при записи записей в файловую систему ZIP.
  • Если значение равно "STORED", поставщик файловой системы ZIP не будет сжимать записи при записи в файловую систему ZIP.
  • Если значение равно "DEFLATED" или свойство не задано, поставщик файловой системы ZIP будет использовать сжатие данных при записи записей в файловую систему ZIP.
  • Если значение не равно "STORED" или "DEFLATED", при создании файловой системы Zip будет брошено исключение IllegalArgumentException.
releaseVersion String или Integer null/unset Значение, представляющее версию записи для доступа к многоверсионным JAR-файлам. Если JAR-файл не является многоверсионным JAR-файлом, значение будет проигнорировано, и JAR-файл будет считаться без версии.

Значение должно быть либо строкой "runtime", либо представлять действительный номер версии платформы Java SE, например, 9 или 14, для определения записи версии.

  • Если значение равно null или свойство не задано, JAR-файл будет обрабатываться как JAR-файл без версии.
  • Если значение равно "runtime", запись версии будет определяться путём вызова Runtime.Version.feature().
  • Если значение не представляет действительный номер версии платформы Java SE, будет брошено исключение IllegalArgumentException.

Примеры:

Создать новую файловую систему ZIP, идентифицируемую URI. Если файл ZIP не существует, он будет создан:
 

     URI uri = URI.create("jar:file:/home/luckydog/tennisTeam.zip");
     Map<String, String> env = Map.of("create", "true");
     FileSystem zipfs = FileSystems.newFileSystem(uri, env);
 
 
Создать новую файловую систему ZIP, указав путь и используя автоматическое определение типа файла. Пройтись от корня JAR, отображая каждую найденную запись:
 

     FileSystem zipfs = FileSystems.newFileSystem(Path.of("helloworld.jar"));
     Path rootDir = zipfs.getPath("/");
     Files.walk(rootDir)
            .forEach(System.out::println);
 
 
Граф модулей:
Module graph for jdk.zipfsModule graph for jdk.zipfs
С:
9

Услуги

Тип Описание
FileSystemProvider
Класс-поставщик услуг для файловых систем.

© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://download.java.net/java/early_access/jdk24/docs/api/jdk.zipfs/module-summary.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API