Class ZipUtils

java.lang.Object
io.quarkus.fs.util.ZipUtils

public class ZipUtils extends Object
Author:
Alexey Loubyansky
  • Constructor Details

    • ZipUtils

      public ZipUtils()
  • Method Details

    • unzip

      public static void unzip(Path zipFile, Path targetDir) throws IOException
      Throws:
      IOException
    • toZipUri

      public static URI toZipUri(Path zipFile) throws IOException
      Throws:
      IOException
    • copyFromZip

      public static void copyFromZip(Path source, Path target) throws IOException
      Throws:
      IOException
    • zip

      public static void zip(Path src, Path zipFile) throws IOException
      Throws:
      IOException
    • newZip

      public static FileSystem newZip(Path zipFile) throws IOException
      Throws:
      IOException
    • newZip

      public static FileSystem newZip(Path zipFile, Map<String,Object> env) throws IOException
      In this version, callers can set whatever parameters they like for the FileSystem. Note that these values always take precedence over whatever the library itself sets.
      Throws:
      IOException
    • newFileSystem

      public static FileSystem newFileSystem(URI uri, Map<String,Object> env) throws IOException
      This call is not thread safe, a single of FileSystem can be created for the provided uri until it is closed.
      Parameters:
      uri - The uri to the zip file.
      env - Env map.
      Returns:
      A new FileSystem.
      Throws:
      IOException - in case of a failure
    • newFileSystem

      public static FileSystem newFileSystem(Path path) throws IOException
      Constructs a new FileSystem to access the contents of a zip as a file system.
      Parameters:
      path - The zip file.
      Returns:
      A new FileSystem instance
      Throws:
      IOException - in case of a failure
    • newFileSystem

      @Deprecated public static FileSystem newFileSystem(Path path, ClassLoader classLoader) throws IOException
      Deprecated.
      Use newFileSystem(Path). Providing a classLoader makes no difference, since the ZipFileSystemProvider is part of the FileSystemProvider.installedProviders() list. No classloader needs to be searched for a custom FileSystemProvider.
      This call is thread safe, a new FS is created for each invocation.
      Parameters:
      path - The zip file.
      classLoader - the classloader to locate the appropriate FileSystemProvider to open the path
      Returns:
      A new FileSystem instance
      Throws:
      IOException - in case of a failure
    • openReadOnly

      public static FileSystem openReadOnly(Path path) throws IOException
      Opens a read-only, non-interruptible FileSystem for the given ZIP/JAR file.

      Unlike newFileSystem(Path), this implementation uses RandomAccessFile instead of FileChannel, making it immune to thread-interrupt-induced channel closures (JDK-8316882).

      Entry data is fully materialized in memory on each read (both the compressed and uncompressed bytes). Individual entries are capped at 256 MB uncompressed. Callers reading many entries concurrently against the same filesystem should be aware of the resulting heap usage.

      Parameters:
      path - the ZIP or JAR file
      Returns:
      a read-only FileSystem instance
      Throws:
      IOException - if the file cannot be read or is not a valid ZIP archive
    • wrapForJDK8232879

      @Deprecated(forRemoval=true, since="0.11.0") public static OutputStream wrapForJDK8232879(OutputStream original)
      Deprecated, for removal: This API element is subject to removal in a future version.
      Do not wrap the OutputStream, it is not needed anymore.
      This is a hack to get past the JDK-8232879 issue which causes CRC errors when writing out data to (jar) files using ZipFileSystem.

      Made into a no-op given the JDK issue has been fixed.

      Parameters:
      original - The original outputstream which will be wrapped into a new outputstream that delegates to this one.
      Returns:
    • zipReproducibly

      public static void zipReproducibly(Path src, Path zipFile, Instant entryTime) throws IOException
      Create a new ZIP file, ensuring reproducibility by sorting the files before adding them and enforcing the timestamps.
      Throws:
      IOException
    • createNewReproducibleZipFileSystem

      public static FileSystem createNewReproducibleZipFileSystem(Path zipFile, Instant entryTime) throws IOException
      Create a new ZIP FileSystem, ensuring reproducibility by sorting the files before adding them and enforcing the timestamps.
      Throws:
      IOException
    • createNewReproducibleZipFileSystem

      public static FileSystem createNewReproducibleZipFileSystem(Path zipFile, Map<String,Object> env, Instant entryTime) throws IOException
      Create a new ZIP FileSystem, ensuring better reproducibility by enforcing entry timestamps for every entry.
      Throws:
      IOException