A Java library for creating and reading cabinet files (*.cab
) with Java using NIO ByteBuffer.
It was created using the official Microsoft CAB Documentation and has almost no dependencies.
- Checksum supported
- makes only use of Java NIO2 ByteBuffers
- Uncompressed, MSZIP, Quantum and LZX compression support
- Recursive directory packing with subfolder support
- Splitting archives into multiple cabinets
- Java 8+ compatible
- Test files are located in
test/
-Directory, this contains the test cab from the pdf indocu/
directory
CabArchive.addFile(Path)
automatically records DOS file attributes like read-only or hidden when available. You can also specify attributes manually using
archive.addFile("name.txt", buffer, CfFile.ATTRIB_READONLY | CfFile.ATTRIB_HIDDEN);
Use CabExtractor.extractWithAttributes
to retrieve these attributes or
extractToDirectory
to restore them on disk.
You can add entire directory trees using CabArchive.addDirectory(Path)
. Relative
paths are preserved inside the cabinet. When building large archives you can
split the output into multiple cabinets using CabGenerator
:
CabArchive archive = new CabArchive();
archive.addDirectory(Paths.get("assets"));
CabGenerator generator = new CabGenerator(archive);
List<ByteBuffer> cabs = generator.createCabinetSet(1_000_000); // split after 1 MB
CabArchive.addFile(Path)
also preserves the last modified time of the source
file. When extracting with extractWithAttributes
the returned
ExtractedFile
contains this timestamp and extractToDirectory
restores it on
disk. The time format follows the same semantics as the Java ZIP API.