java 如何解压文件
解压文件的方法
在Java中解压文件通常使用java.util.zip包或第三方库如Apache Commons Compress。以下是几种常见的方法:
使用java.util.zip解压ZIP文件
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
public class UnzipFile {
public static void unzip(String zipFilePath, String destDirectory) throws IOException {
File destDir = new File(destDirectory);
if (!destDir.exists()) {
destDir.mkdir();
}
try (ZipInputStream zipIn = new ZipInputStream(new FileInputStream(zipFilePath))) {
ZipEntry entry = zipIn.getNextEntry();
while (entry != null) {
String filePath = destDirectory + File.separator + entry.getName();
if (!entry.isDirectory()) {
extractFile(zipIn, filePath);
} else {
File dir = new File(filePath);
dir.mkdir();
}
zipIn.closeEntry();
entry = zipIn.getNextEntry();
}
}
}
private static void extractFile(ZipInputStream zipIn, String filePath) throws IOException {
try (FileOutputStream fos = new FileOutputStream(filePath)) {
byte[] buffer = new byte[1024];
int len;
while ((len = zipIn.read(buffer)) > 0) {
fos.write(buffer, 0, len);
}
}
}
}
使用Apache Commons Compress解压多种格式文件
添加Maven依赖:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-compress</artifactId>
<version>1.21</version>
</dependency>
解压示例代码:
import org.apache.commons.compress.archivers.ArchiveException;
import org.apache.commons.compress.archivers.ArchiveInputStream;
import org.apache.commons.compress.archivers.ArchiveStreamFactory;
import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
import org.apache.commons.compress.utils.IOUtils;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class UnzipWithCommons {
public static void unzip(String zipFilePath, String destDirectory) throws IOException, ArchiveException {
File destDir = new File(destDirectory);
if (!destDir.exists()) {
destDir.mkdir();
}
try (ArchiveInputStream ais = new ArchiveStreamFactory()
.createArchiveInputStream(ArchiveStreamFactory.ZIP, new FileInputStream(zipFilePath))) {
ZipArchiveEntry entry;
while ((entry = (ZipArchiveEntry) ais.getNextEntry()) != null) {
File outputFile = new File(destDir, entry.getName());
if (entry.isDirectory()) {
outputFile.mkdirs();
} else {
try (FileOutputStream fos = new FileOutputStream(outputFile)) {
IOUtils.copy(ais, fos);
}
}
}
}
}
}
注意事项
- 解压前需检查目标目录是否存在,不存在时需创建
- 处理大文件时注意内存使用,建议使用缓冲区
- 解压过程中需处理可能出现的IO异常
- 对于加密ZIP文件,需使用支持解密的库
以上方法提供了从基础到高级的解压方案,可根据项目需求选择合适的实现方式。







