zip

Here is a simple example of how to use Compress4J to create and extract zip files:

Example Usage

Zip Creation
try (ZipArchiveCreator zipCreator = ZipArchiveCreator.builder(Path.of("example.zip"))
        .compressionLevel(9)
        .compressionMethod(ZipCompressionMethod.DEFLATED)
        .encoding(StandardCharsets.UTF_8)
        .zip64(ZipZip64Mode.AS_NEEDED)
        .comment("This is a zip comment")
        .createUnicodeExtraFields(ZipUnicodeExtraFields.ALWAYS)
        .build()) {
    zipCreator.addFile(Path.of("path/to/file.txt"));
    zipCreator.addDirectoryRecursively(Path.of("sourceDir"));
}
Zip Extraction
try (ZipArchiveExtractor zipExtractor = ZipArchiveExtractor.builder(Path.of("example.zip"))
        .overwrite(true)
        .stripComponents(1)
        .ignoreLocalFileHeader(true)
        .useUnicodeExtraFields(true)
        .filter(entry -> entry.name().endsWith(".txt"))
        .errorHandler((entry, exception) -> SKIP)
        .escapingSymlinkPolicy(EscapingSymlinkPolicy.DISALLOW)
        .build()) {
    zipExtractor.extract(Path.of("outputDir"));
}
Zip extraction from an InputStream
try (var extractor = ZipArchiveExtractor.streaming(download).build()) {
    extractor.extract(outputDir);
}
Streaming mode reads only local headers; zip keeps Unix modes in the central directory. In streaming mode entries extract with default permissions and symlinks become regular files holding their target. Read from a file or SeekableByteChannel to keep them. See format capabilities.