Java压缩ZIP
在Java编程中,经常需要对文件或文件夹进行压缩和解压操作。其中,ZIP是最常见和广泛支持的压缩格式之一。本文将介绍如何使用Java压缩和解压ZIP文件,并提供相应的代码示例。
ZIP压缩
使用Java压缩ZIP文件需要使用java.util.zip
包中的相关类。首先,我们需要创建一个压缩文件,并向其中写入要压缩的文件和文件夹。接下来,我们将逐步介绍如何实现这一过程。
创建ZIP文件
首先,我们需要创建一个ZipOutputStream
对象,该对象用于将数据写入ZIP文件。我们可以通过将FileOutputStream
与ZipOutputStream
结合使用来实现这一点,如下所示:
import java.io.File;
import java.io.FileOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public class ZipUtils {
public static void createZipFile(String sourceFolder, String zipFilePath) {
try {
FileOutputStream fos = new FileOutputStream(zipFilePath);
ZipOutputStream zos = new ZipOutputStream(fos);
File folder = new File(sourceFolder);
addFolderToZip(folder, folder.getName(), zos);
zos.closeEntry();
zos.close();
fos.close();
System.out.println("ZIP文件创建成功!");
} catch (Exception e) {
e.printStackTrace();
}
}
private static void addFolderToZip(File folder, String parentFolder, ZipOutputStream zos) throws Exception {
for (File file : folder.listFiles()) {
if (file.isDirectory()) {
addFolderToZip(file, parentFolder + "/" + file.getName(), zos);
continue;
}
byte[] buffer = new byte[1024];
FileInputStream fis = new FileInputStream(file);
zos.putNextEntry(new ZipEntry(parentFolder + "/" + file.getName()));
int length;
while ((length = fis.read(buffer)) > 0) {
zos.write(buffer, 0, length);
}
fis.close();
}
}
}
代码中的createZipFile
方法接受两个参数:sourceFolder
和zipFilePath
。sourceFolder
是要压缩的文件夹的路径,zipFilePath
是要创建的ZIP文件的路径。该方法使用FileOutputStream
创建一个输出流,并将其与ZipOutputStream
关联。然后,调用addFolderToZip
方法,将源文件夹的内容逐个添加到ZIP文件中。最后,关闭有关的流。
压缩文件夹
为了将文件夹及其内容压缩到ZIP文件中,我们需要创建一个递归方法addFolderToZip
。该方法接受三个参数:folder
、parentFolder
和zos
。folder
是要添加到ZIP文件中的文件夹,parentFolder
是其上级文件夹的路径,zos
是用于写入ZIP文件的ZipOutputStream
对象。
该方法首先遍历文件夹中的所有文件和子文件夹。如果遇到一个子文件夹,方法将递归调用自身,将子文件夹及其内容添加到ZIP文件中。如果遇到一个文件,则会创建一个ZipEntry
对象,用于表示ZIP文件中的一个条目,并通过zos.putNextEntry
方法将其添加到ZIP文件中。然后,将文件的内容写入到ZIP文件中,直到结束。
ZIP解压
在Java中解压ZIP文件也非常简单。我们只需使用java.util.zip
包中的ZipInputStream
类来实现。接下来,我们将逐步介绍如何解压ZIP文件。
解压ZIP文件
下面是一个示例代码,演示了如何解压ZIP文件到指定的目标文件夹:
import java.io.File;
import java.io.FileOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
public class UnzipUtils {
public static void unzipFile(String zipFilePath, String destFolder) {
try {
File folder = new File(destFolder);
if (!folder.exists()) {
folder.mkdir();
}
ZipInputStream zis = new ZipInputStream(new FileInputStream(zipFilePath));
ZipEntry entry;
while ((entry = zis.getNextEntry()) != null) {
String filePath = destFolder + File.separator + entry.getName();
if (entry.isDirectory()) {
File dir = new File(filePath);
dir.mkdir();
} else {
FileOutputStream fos = new FileOutputStream(filePath);
byte[] buffer = new byte[102