当然,我可以为你提供一个简单的Java工具类示例,用于实现ZIP文件的压缩和解压。这个工具类将使用`java.util.zip`包中的类。
``
`java
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;
public class ZipUtil {
/**
* 压缩文件或文件夹到ZIP文件
* @param sourcePath 需要压缩的源文件或文件夹路径
* @param zipFilePath 压缩后的ZIP文件路径
* @throws IOException 如果发生I/O错误
*/
public static void zip(String sourcePath, String zipFilePath) throws IOException {
FileOutputStream fos = new FileOutputStream(zipFilePath);
ZipOutputStream zos = new ZipOutputStream(fos);
addFolderToZip("", sourcePath, zos);
zos.close();
fos.close();
}
/**
* 递归添加文件或文件夹到ZIP输出流
* @param base 基准路径
* @param srcFolder 源文件夹路径
* @param zos ZIP输出流
* @throws IOException 如果发生I/O错误
*/
private static void addFolderToZip(String base, String srcFolder, ZipOutputStream zos) throws IOException {
File srcFile = new File(srcFolder);
if (srcFile.isDirectory()) {
File[] files = srcFile.listFiles();
if (files != null) {
for (File file : files) {
String filePath = file.getPath();
if (new File(filePath).isDirectory()) {
addFolderToZip(base + file.getName() + "/", filePath, zos);
} else {
addToZip(base + file.getName(), filePath, zos);
}
}
}
} else {
addToZip(base, srcFolder, zos);
}
}
/**
* 将文件添加到ZIP输出流
* @param filePath 文件路径
* @param srcFile 源文件
* @param zos ZIP输出流
* @throws IOException 如果发生I/O错误
*/
private static void addToZip(String filePath, String srcFile, ZipOutputStream zos) throws IOException {
FileInputStream fis = new FileInputStream(srcFile);
ZipEntry zipEntry = new ZipEntry(filePath);
zos.putNextEntry(zipEntry);
byte[] bytes = new byte[1024];
int length;
while ((length = fis.read(bytes)) >= 0) {
zos.write(bytes, 0, length);
}
zos.closeEntry();
fis.close();
}
/**
* 解压ZIP文件
* @param zipFilePath ZIP文件路径
* @param destFolder 解压目标文件夹路径
* @throws IOException 如果发生I/O错误
*/
public static void unzip(String zipFilePath, String destFolder) throws IOException {
File destDir = new File(destFolder);
if (!destDir.exists()) {
destDir.mkdir();
}
ZipInputStream zipIn = new ZipInputStream(new BufferedInputStream(new FileInputStream(zipFilePath)));
ZipEntry entry = zipIn.getNextEntry();
// 遍历ZIP条目
while (entry != null) {
String filePath = destFolder + File.separator + entry.getName();
if (!entry.isDirectory()) {
// 如果是文件,则解压
extractFile(zipIn, filePath);
} else {
// 如果是目录,则创建目录
File dir = new File(filePath);
dir.mkdir();
}
zipIn.closeEntry();
entry = zipIn.getNextEntry();
}
zipIn.close();
}
/**
* 解压文件
* @param zipIn ZIP输入流
* @param filePath 解压后的文件路径
* @throws IOException 如果发生I/O错误
*/
private static void extractFile(ZipInputStream zipIn, String filePath) throws IOException {
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(filePath));
byte[] bytesIn = new byte[409