You are viewing the documentation for a prerelease version. View Latest

tar

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

Example Usage

Tar Creation
try (TarArchiveCreator tarCreator = TarArchiveCreator.builder(Path.of("example.tar"))
        .blockSize(1024)
        .encoding(UTF_8.name())
        .addPaxHeadersForNonAsciiNames(true)
        .bigNumberMode(BIGNUMBER_ERROR)
        .longFileMode(LONGFILE_GNU)
        .filter((name, p) -> !name.endsWith("some_file.txt"))
        .build()) {
    tarCreator.addDirectoryRecursively(Path.of("exampleDir"));
    tarCreator.addFile(Path.of("path/to/file.txt"));
}
Tar Extraction
try (TarArchiveExtractor tarExtractor = TarArchiveExtractor.builder(Path.of("example.tar"))
        .filter(entry -> !entry.name().startsWith("bad"))
        .errorHandler((entry, exception) -> RETRY)
        .escapingSymlinkPolicy(ArchiveExtractor.EscapingSymlinkPolicy.DISALLOW)
        .postProcessor((entry, exception) -> {})
        .stripComponents(1)
        .overwrite(true)
        .build()) {
    tarExtractor.extract(Path.of("outputDir"));
}
Tar Gzip Creation
try (TarGzArchiveCreator tarGzCreator = TarGzArchiveCreator.builder(Path.of("example.tar.gz"))
        .compressorOutputStreamBuilder()
        .bufferSize(1024)
        .compressionLevel(BEST_COMPRESSION)
        .comment("comment")
        .deflateStrategy(HUFFMAN_ONLY)
        .operatingSystem(0)
        .parentBuilder()
        .longFileMode(LONGFILE_POSIX)
        .bigNumberMode(BIGNUMBER_POSIX)
        .blockSize(1024)
        .encoding(UTF_8.name())
        .addPaxHeadersForNonAsciiNames(true)
        .filter((name, p) -> !name.endsWith("some_file.txt"))
        .build()) {
    tarGzCreator.addDirectoryRecursively(Path.of("exampleDir"));
    tarGzCreator.addFile(Path.of("path/to/file.txt"));
}
Tar Gzip Extraction
try (TarGzArchiveExtractor tarGzExtractor = TarGzArchiveExtractor.builder(Path.of("example.tar.gz"))
        .filter(entry -> !entry.name().startsWith("bad"))
        .errorHandler((entry, exception) -> RETRY)
        .escapingSymlinkPolicy(ArchiveExtractor.EscapingSymlinkPolicy.DISALLOW)
        .postProcessor((entry, exception) -> {})
        .stripComponents(1)
        .overwrite(true)
        .build()) {
    tarGzExtractor.extract(Path.of("outputDir"));
}
Tar BZip2 Creation
try (TarBZip2ArchiveCreator tarBzip2Creator = TarBZip2ArchiveCreator.builder(Path.of("example.tar.bz2"))
        .compressorOutputStreamBuilder()
        .blockSize(1024)
        .parentBuilder()
        .blockSize(1024)
        .encoding(UTF_8.name())
        .addPaxHeadersForNonAsciiNames(true)
        .bigNumberMode(BIGNUMBER_ERROR)
        .longFileMode(LONGFILE_GNU)
        .filter((name, p) -> !name.endsWith("some_file.txt"))
        .build()) {
    tarBzip2Creator.addDirectoryRecursively(Path.of("exampleDir"));
    tarBzip2Creator.addFile(Path.of("path/to/file.txt"));
}
Tar Bzip2 Extraction
try (TarBZip2ArchiveExtractor tarBzip2Extractor = TarBZip2ArchiveExtractor.builder(Path.of("example.tar.bz2"))
        .filter(entry -> !entry.name().startsWith("bad"))
        .errorHandler((entry, exception) -> RETRY)
        .escapingSymlinkPolicy(ArchiveExtractor.EscapingSymlinkPolicy.DISALLOW)
        .postProcessor((entry, exception) -> {})
        .stripComponents(1)
        .overwrite(true)
        .build()) {
    tarBzip2Extractor.extract(Path.of("outputDir"));
}
Tar XZ Creation
try (TarXzArchiveCreator tarXzCreator = TarXzArchiveCreator.builder(Path.of("example.tar.xz"))
        .compressorOutputStreamBuilder()
        .lzma2Options(new LZMA2Options())
        .parentBuilder()
        .blockSize(1024)
        .encoding(UTF_8.name())
        .addPaxHeadersForNonAsciiNames(true)
        .bigNumberMode(BIGNUMBER_ERROR)
        .longFileMode(LONGFILE_GNU)
        .filter((name, p) -> !name.endsWith("some_file.txt"))
        .build()) {
    tarXzCreator.addDirectoryRecursively(Path.of("exampleDir"));
    tarXzCreator.addFile(Path.of("path/to/file.txt"));
}
Tar XZ Extraction
try (TarXzArchiveExtractor tarXzExtractor = TarXzArchiveExtractor.builder(Path.of("example.tar.xz"))
        .filter(entry -> !entry.name().startsWith("bad"))
        .errorHandler((entry, exception) -> RETRY)
        .escapingSymlinkPolicy(ArchiveExtractor.EscapingSymlinkPolicy.DISALLOW)
        .postProcessor((entry, exception) -> {})
        .stripComponents(1)
        .overwrite(true)
        .build()) {
    tarXzExtractor.extract(Path.of("outputDir"));
}
Tar Zstandard Creation
try (TarZstdArchiveCreator tarZstdCreator = TarZstdArchiveCreator.builder(Path.of("example.tar.zst"))
        .compressorOutputStreamBuilder()
        .level(6)
        .parentBuilder()
        .blockSize(1024)
        .encoding(UTF_8.name())
        .addPaxHeadersForNonAsciiNames(true)
        .bigNumberMode(BIGNUMBER_ERROR)
        .longFileMode(LONGFILE_GNU)
        .filter((name, p) -> !name.endsWith("some_file.txt"))
        .build()) {
    tarZstdCreator.addDirectoryRecursively(Path.of("exampleDir"));
    tarZstdCreator.addFile(Path.of("path/to/file.txt"));
}
Tar Zstandard Extraction
try (TarZstdArchiveExtractor tarZstdExtractor = TarZstdArchiveExtractor.builder(Path.of("example.tar.zst"))
        .filter(entry -> !entry.name().startsWith("bad"))
        .errorHandler((entry, exception) -> RETRY)
        .escapingSymlinkPolicy(ArchiveExtractor.EscapingSymlinkPolicy.DISALLOW)
        .postProcessor((entry, exception) -> {})
        .stripComponents(1)
        .overwrite(true)
        .build()) {
    tarZstdExtractor.extract(Path.of("outputDir"));
}
Tar LZMA Creation
try (TarLzmaArchiveCreator tarLzmaCreator = TarLzmaArchiveCreator.builder(Path.of("example.tar.lzma"))
        .blockSize(1024)
        .encoding(UTF_8.name())
        .addPaxHeadersForNonAsciiNames(true)
        .bigNumberMode(BIGNUMBER_ERROR)
        .longFileMode(LONGFILE_GNU)
        .filter((name, p) -> !name.endsWith("some_file.txt"))
        .build()) {
    tarLzmaCreator.addDirectoryRecursively(Path.of("exampleDir"));
    tarLzmaCreator.addFile(Path.of("path/to/file.txt"));
}
Tar LZMA Extraction
try (TarLzmaArchiveExtractor tarLzmaExtractor = TarLzmaArchiveExtractor.builder(Path.of("example.tar.lzma"))
        .filter(entry -> !entry.name().startsWith("bad"))
        .errorHandler((entry, exception) -> RETRY)
        .escapingSymlinkPolicy(ArchiveExtractor.EscapingSymlinkPolicy.DISALLOW)
        .postProcessor((entry, exception) -> {})
        .stripComponents(1)
        .overwrite(true)
        .build()) {
    tarLzmaExtractor.extract(Path.of("outputDir"));
}
Tar framed LZ4 Creation
try (TarLz4ArchiveCreator tarLz4Creator = TarLz4ArchiveCreator.builder(Path.of("example.tar.lz4"))
        .blockSize(1024)
        .encoding(UTF_8.name())
        .addPaxHeadersForNonAsciiNames(true)
        .bigNumberMode(BIGNUMBER_ERROR)
        .longFileMode(LONGFILE_GNU)
        .filter((name, p) -> !name.endsWith("some_file.txt"))
        .build()) {
    tarLz4Creator.addDirectoryRecursively(Path.of("exampleDir"));
    tarLz4Creator.addFile(Path.of("path/to/file.txt"));
}
Tar framed LZ4 Extraction
try (TarLz4ArchiveExtractor tarLz4Extractor = TarLz4ArchiveExtractor.builder(Path.of("example.tar.lz4"))
        .filter(entry -> !entry.name().startsWith("bad"))
        .errorHandler((entry, exception) -> RETRY)
        .escapingSymlinkPolicy(ArchiveExtractor.EscapingSymlinkPolicy.DISALLOW)
        .postProcessor((entry, exception) -> {})
        .stripComponents(1)
        .overwrite(true)
        .build()) {
    tarLz4Extractor.extract(Path.of("outputDir"));
}
Read-only: Compress4J can extract this format but cannot create it.
Tar Unix compress (.Z) Extraction
try (TarZArchiveExtractor tarZExtractor = TarZArchiveExtractor.builder(Path.of("example.tar.Z"))
        .filter(entry -> !entry.name().startsWith("bad"))
        .errorHandler((entry, exception) -> RETRY)
        .escapingSymlinkPolicy(ArchiveExtractor.EscapingSymlinkPolicy.DISALLOW)
        .postProcessor((entry, exception) -> {})
        .stripComponents(1)
        .overwrite(true)
        .build()) {
    tarZExtractor.extract(Path.of("outputDir"));
}