Comprehensive Java utility library providing collections, strings, beans, dates, I/O, and numerous other utility functions.
—
ZIP file compression, decompression, and archive manipulation utilities through the ZipUtil class.
Create ZIP archives from files and directories.
/**
* Compress file or directory to ZIP with same name
* @param srcPath path to file or directory to compress
* @return ZIP file created
*/
public static File zip(String srcPath);
/**
* Compress file or directory to ZIP with charset
* @param srcPath path to file or directory to compress
* @param charset character encoding for file names
* @return ZIP file created
*/
public static File zip(String srcPath, Charset charset);
/**
* Compress file to ZIP
* @param srcFile file or directory to compress
* @return ZIP file created
*/
public static File zip(File srcFile);
/**
* Compress file to specified ZIP path
* @param srcPath source file or directory path
* @param zipPath destination ZIP file path
* @return ZIP file created
*/
public static File zip(String srcPath, String zipPath);
/**
* Compress file to ZIP with directory inclusion control
* @param srcPath source file or directory path
* @param zipPath destination ZIP file path
* @param withSrcDir whether to include source directory in ZIP
* @return ZIP file created
*/
public static File zip(String srcPath, String zipPath, boolean withSrcDir);
/**
* Compress multiple files to ZIP
* @param zipFile destination ZIP file
* @param withSrcDir whether to include source directories
* @param srcFiles source files to compress
* @return ZIP file created
*/
public static File zip(File zipFile, boolean withSrcDir, File... srcFiles);
/**
* Compress files to ZIP with charset and filter
* @param zipFile destination ZIP file
* @param charset character encoding
* @param withSrcDir whether to include source directories
* @param filter file filter for selection
* @param srcFiles source files to compress
* @return ZIP file created
*/
public static File zip(File zipFile, Charset charset, boolean withSrcDir, FileFilter filter, File... srcFiles);Usage Examples:
import cn.hutool.core.util.ZipUtil;
import java.io.File;
import java.nio.charset.StandardCharsets;
// Simple compression
File zipFile = ZipUtil.zip("/path/to/source"); // Creates source.zip
// Compress to specific location
File customZip = ZipUtil.zip("/path/to/source", "/backup/archive.zip");
// Compress multiple files
File[] files = {new File("file1.txt"), new File("file2.txt")};
File multiZip = ZipUtil.zip(new File("archive.zip"), false, files);
// Compress with UTF-8 encoding
File utf8Zip = ZipUtil.zip("/path/to/source", StandardCharsets.UTF_8);Extract ZIP archives to directories.
/**
* Extract ZIP file to same directory
* @param zipFilePath path to ZIP file
* @return directory containing extracted files
*/
public static File unzip(String zipFilePath);
/**
* Extract ZIP file with character encoding
* @param zipFilePath path to ZIP file
* @param charset character encoding for file names
* @return directory containing extracted files
*/
public static File unzip(String zipFilePath, Charset charset);
/**
* Extract ZIP file
* @param zipFile ZIP file to extract
* @return directory containing extracted files
*/
public static File unzip(File zipFile);
/**
* Extract ZIP file to specific directory
* @param zipFilePath path to ZIP file
* @param outFileDir destination directory path
* @return directory containing extracted files
*/
public static File unzip(String zipFilePath, String outFileDir);
/**
* Extract ZIP file to directory with charset
* @param zipFile ZIP file to extract
* @param outFile destination directory
* @param charset character encoding
* @return directory containing extracted files
*/
public static File unzip(File zipFile, File outFile, Charset charset);
/**
* Extract ZIP file with size limit
* @param zipFile opened ZipFile
* @param outFile destination directory
* @param limit maximum bytes to extract
* @return directory containing extracted files
*/
public static File unzip(ZipFile zipFile, File outFile, long limit);Usage Examples:
import cn.hutool.core.util.ZipUtil;
import java.io.File;
import java.nio.charset.StandardCharsets;
// Simple extraction
File extractedDir = ZipUtil.unzip("archive.zip");
// Extract to specific directory
File targetDir = ZipUtil.unzip("archive.zip", "/extract/here");
// Extract with UTF-8 encoding
File utf8Dir = ZipUtil.unzip("chinese-files.zip", StandardCharsets.UTF_8);
// Extract with size limit (security)
try (ZipFile zf = new ZipFile("large-archive.zip")) {
File safeDir = ZipUtil.unzip(zf, new File("safe-extract"), 100_000_000); // 100MB limit
}Modify existing ZIP archives by adding or reading entries.
/**
* Append file to existing ZIP archive
* @param zipPath path to existing ZIP file
* @param appendFilePath path to file to append
* @param options copy options
*/
public static void append(Path zipPath, Path appendFilePath, CopyOption... options);
/**
* Add string content as file to ZIP
* @param zipFile ZIP file to modify
* @param path internal path for the content
* @param data string content to add
* @return modified ZIP file
*/
public static File zip(File zipFile, String path, String data);
/**
* Add content from InputStream to ZIP
* @param zipFile ZIP file to modify
* @param path internal path for the content
* @param data InputStream containing data
* @return modified ZIP file
*/
public static File zip(File zipFile, String path, InputStream data);Work with ZIP data in memory using streams.
/**
* Compress to ZIP output stream
* @param out output stream to write ZIP data
* @param charset character encoding
* @param withSrcDir whether to include source directories
* @param filter file filter
* @param srcFiles source files to compress
*/
public static void zip(OutputStream out, Charset charset, boolean withSrcDir, FileFilter filter, File... srcFiles);
/**
* Compress string to GZIP bytes
* @param content string content to compress
* @param charset character encoding
* @return compressed bytes
*/
public static byte[] gzip(String content, String charset);
/**
* Decompress GZIP bytes to string
* @param buf compressed bytes
* @param charset character encoding
* @return decompressed string
*/
public static String unGzip(byte[] buf, String charset);
/**
* Compress bytes using deflate
* @param data bytes to compress
* @param level compression level (0-9)
* @return compressed bytes
*/
public static byte[] deflate(byte[] data, int level);
/**
* Decompress deflate compressed bytes
* @param data compressed bytes
* @return decompressed bytes
*/
public static byte[] undeflate(byte[] data);Usage Examples:
import cn.hutool.core.util.ZipUtil;
import java.io.ByteArrayOutputStream;
import java.nio.charset.StandardCharsets;
// GZIP compression
String text = "Hello, World! This is a long text to compress.";
byte[] compressed = ZipUtil.gzip(text, "UTF-8");
String decompressed = ZipUtil.unGzip(compressed, "UTF-8");
// Deflate compression
byte[] data = "Sample data".getBytes();
byte[] deflated = ZipUtil.deflate(data, 6); // Level 6 compression
byte[] inflated = ZipUtil.undeflate(deflated);
// Stream compression
ByteArrayOutputStream baos = new ByteArrayOutputStream();
File[] files = {new File("file1.txt"), new File("file2.txt")};
ZipUtil.zip(baos, StandardCharsets.UTF_8, false, null, files);
byte[] zipBytes = baos.toByteArray();Read and inspect ZIP archive contents.
/**
* Get input stream for ZIP entry
* @param zipFile opened ZIP file
* @param zipEntry ZIP entry to read
* @return InputStream for entry data
*/
public static InputStream getStream(ZipFile zipFile, ZipEntry zipEntry);
/**
* Read ZIP entry names
* @param zipFile ZIP file to inspect
* @return list of entry names
*/
public static List<String> listFileNames(ZipFile zipFile);
/**
* Get ZIP entries enumeration
* @param zipFile ZIP file to inspect
* @return enumeration of ZIP entries
*/
public static Enumeration<? extends ZipEntry> entries(ZipFile zipFile);
/**
* Check if ZIP file contains entry
* @param zipFile ZIP file to check
* @param name entry name to find
* @return true if entry exists
*/
public static boolean contains(ZipFile zipFile, String name);// Compression types
import java.util.zip.ZipFile;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
import java.util.zip.ZipInputStream;
import java.io.FileFilter;
import java.nio.charset.Charset;
import java.nio.file.CopyOption;
// Compression levels
public static final int BEST_COMPRESSION = 9;
public static final int BEST_SPEED = 1;
public static final int DEFAULT_COMPRESSION = -1;Install with Tessl CLI
npx tessl i tessl/maven-cn-hutool--hutool-core