在 Java 中,你可以使用多种方式进行 ZIP 压缩。以下是一些常用的实现方式,包括所需的步骤、依赖库和示例代码。
步骤流程:
示例代码:
import java.io.*;
import java.util.zip.*;
public class ZipExample {
public static void main(String[] args) throws IOException {
String sourceFile = "path/to/source/file";
String zipFile = "path/to/output/zip/file.zip";
FileOutputStream fos = new FileOutputStream(zipFile);
ZipOutputStream zipOut = new ZipOutputStream(fos);
File fileToZip = new File(sourceFile);
zipFile(fileToZip, fileToZip.getName(), zipOut);
zipOut.close();
fos.close();
}
private static void zipFile(File fileToZip, String fileName, ZipOutputStream zipOut) throws IOException {
if (fileToZip.isHidden()) {
return;
}
if (fileToZip.isDirectory()) {
File[] children = fileToZip.listFiles();
for (File childFile : children) {
zipFile(childFile, fileName + "/" + childFile.getName(), zipOut);
}
return;
}
FileInputStream fis = new FileInputStream(fileToZip);
ZipEntry zipEntry = new ZipEntry(fileName);
zipOut.putNextEntry(zipEntry);
byte[] bytes = new byte[1024];
int length;
while ((length = fis.read(bytes)) >= 0) {
zipOut.write(bytes, 0, length);
}
fis.close();
}
}
步骤流程:
Maven 依赖坐标:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-compress</artifactId>
<version>1.22</version>
</dependency>
Gradle 依赖坐标:
implementation 'org.apache.commons:commons-compress:1.22'
示例代码:
import org.apache.commons.compress.archivers.zip.*;
import org.apache.commons.compress.utils.IOUtils;
import java.io.*;
public class CommonsCompressExample {
public static void main(String[] args) throws IOException {
String sourceFile = "path/to/source/file";
String zipFile = "path/to/output/zip/file.zip";
FileOutputStream fos = new FileOutputStream(zipFile);
ArchiveOutputStream archiveOut = new ZipArchiveOutputStream(fos);
File fileToZip = new File(sourceFile);
zipFile(fileToZip, fileToZip.getName(), archiveOut);
archiveOut.close();
fos.close();
}
private static void zipFile(File fileToZip, String entryName, ArchiveOutputStream archiveOut) throws IOException {
ZipArchiveEntry zipEntry = new ZipArchiveEntry(entryName);
archiveOut.putArchiveEntry(zipEntry);
if (fileToZip.isFile()) {
FileInputStream fis = new FileInputStream(fileToZip);
IOUtils.copy(fis, archiveOut);
fis.close();
}
archiveOut.closeArchiveEntry();
}
}
以上是两种常用的在 Java 中实现 ZIP 压缩的方式。你可以根据实际需求选择适合你项目的方法并进行实现。记得替换示例代码中的文件路径为你自己的路径。