Apache Commons logo Commons Compress

Apache Commons Compress™

The Apache Commons Compress library defines an API for working with ar, cpio, Unix dump, tar, zip, gzip, XZ, Pack200, bzip2, 7z, arj, lzma, snappy, DEFLATE, lz4 and Z files.

The code in this component has many origins:

  • The bzip2, tar and zip support came from Avalon's Excalibur, but originally from Ant, as far as life in Apache goes. The tar package is originally Tim Endres' public domain package. The bzip2 package is based on the work done by Keiron Liddle as well as Julian Seward's libbzip2. It has migrated via:
    Ant -> Avalon-Excalibur -> Commons-IO -> Commons-Compress.
  • The cpio package has been contributed by Michael Kuss and the jRPM project.


The current release is 1.13 and requires Java 7.

Below we highlight some new features, for a full list of changes see the Changes Report.

What's coming in 1.14?

  • Added support for writing the Snappy format
  • Added support for the LZ4 compression format

What's new in 1.13?

  • The 7z package as well as ZipArchiveOutputStream and ZipFile can now use SeekableByteChannel when random acces is needed. This allows archives to be read from inputs and written to outputs that are seekable but are not represented by Files.
  • It is now possible to add Compressor- and ArchiverStream implementations using the JDK's ServiceLoader mechanism. Please see Extending Commons Compress.
  • Added support for writing the legacy LZMA format as compressor stream and inside 7z archives - this requires XZ for Java 1.6.


The compress component is split into compressors and archivers. While compressors (un)compress streams that usually store a single entry, archivers deal with archives that contain structured content represented by ArchiveEntry instances which in turn usually correspond to single files or directories.

Currently the bzip2, Pack200, XZ, gzip, lzma and Z formats are supported as compressors where gzip support is mostly provided by the java.util.zip package and Pack200 support by the java.util.jar package of the Java class library. XZ and lzma support is provided by the public domain XZ for Java library. As of Commons Compress 1.14 support for the Z format is read-only.

The ar, arj, cpio, dump, tar, 7z and zip formats are supported as archivers where the zip implementation provides capabilities that go beyond the features found in java.util.zip. As of Commons Compress 1.13 support for the dump and arj formats is read-only - 7z can read most compressed and encrypted archives but only write unencrypted ones. LZMA(2) support in 7z requires XZ for Java as well.

The compress component provides abstract base classes for compressors and archivers together with factories that can be used to choose implementations by algorithm name. In the case of input streams the factories can also be used to guess the format and provide the matching implementation.


Download now!