使用java基础类实现zip压缩和zip解压工具类分享


当然,我可以为你提供一个简单的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