java实现分卷压缩
时间: 2023-11-29 16:04:36 浏览: 39
以下是Java实现分卷压缩的代码示例:
```java
import net.lingala.zip4j.ZipFile;
import net.lingala.zip4j.exception.ZipException;
import net.lingala.zip4j.model.ZipParameters;
import net.lingala.zip4j.util.Zip4jConstants;
import java.io.File;
import java.util.ArrayList;
public class ZipUtil {
/**
* 压缩文件或文件夹
*
* @param srcFile 源文件或文件夹
* @param destPath 目标路径
* @param partSize 分卷大小,单位为字节
* @param password 压缩密码,如果不需要密码可以传null
* @param comment 压缩注释,可以传null
* @param isEncrypt 是否加密
* @throws ZipException
*/
public static void zip(File srcFile, String destPath, long partSize, String password, String comment, boolean isEncrypt) throws ZipException {
ZipFile zipFile = new ZipFile(destPath);
ZipParameters parameters = new ZipParameters();
parameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE);
parameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL);
if (password != null) {
parameters.setEncryptFiles(true);
parameters.setEncryptionMethod(Zip4jConstants.ENC_METHOD_STANDARD);
parameters.setPassword(password);
}
if (comment != null) {
parameters.setComment(comment);
}
if (isEncrypt) {
parameters.setEncryptFiles(true);
parameters.setEncryptionMethod(Zip4jConstants.ENC_METHOD_STANDARD);
}
if (srcFile.isDirectory()) {
ArrayList<File> fileList = new ArrayList<>();
getAllFiles(srcFile, fileList);
zipFile.addFiles(fileList, parameters);
} else {
zipFile.addFile(srcFile, parameters);
}
if (partSize > 0) {
zipFile.createZipFileFromFolder(srcFile, parameters, true, partSize);
} else {
zipFile.createZipFileFromFolder(srcFile, parameters, true, -1);
}
}
/**
* 获取文件夹下的所有文件
*
* @param folder 文件夹
* @param fileList 文件列表
*/
private static void getAllFiles(File folder, ArrayList<File> fileList) {
File[] files = folder.listFiles();
for (File file : files) {
if (file.isDirectory()) {
getAllFiles(file, fileList);
} else {
fileList.add(file);
}
}
}
/**
* 解压缩文件
*
* @param srcFile 源文件
* @param destPath 目标路径
* @param password 解压密码,如果没有密码可以传null
* @throws ZipException
*/
public static void unzip(File srcFile, String destPath, String password) throws ZipException {
ZipFile zipFile = new ZipFile(srcFile);
if (zipFile.isEncrypted()) {
zipFile.setPassword(password);
}
zipFile.extractAll(destPath);
}
}
```
使用示例:
```java
public class Test {
public static void main(String[] args) {
try {
// 压缩文件夹
File srcFile = new File("D:\\test");
String destPath = "D:\\test.zip";
long partSize = 1024 * 1024 * 100; // 分卷大小为100MB
String password = "123456";
String comment = "test";
boolean isEncrypt = true;
ZipUtil.zip(srcFile, destPath, partSize, password, comment, isEncrypt);
// 解压缩文件
File zipFile = new File("D:\\test.zip");
String unzipPath = "D:\\test_unzip";
String unzipPassword = "123456";
ZipUtil.unzip(zipFile, unzipPath, unzipPassword);
} catch (ZipException e) {
e.printStackTrace();
}
}
}
```