Java解压zip文件
前提
zip文件存在:D:\tmp\mytest.zip。下面将以解压“D:\tmp\mytest.zip”到目录“D:\tmp”为例进行示例。
代码
pom.xml
<!-- 日志 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.20</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.7.25</version>
</dependency>
ZipUtil.java
package com.ydfind.zip;
import lombok.extern.slf4j.Slf4j;
import java.io.*;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
/**
* zip解压示例
*
* @author : ydfind
* @date : 2019-06-06
*/
@Slf4j
public class ZipUtil {
public static void main(String[] args) throws IOException {
String filename = "D:\\tmp\\mytest.zip";
String path = "D:\\tmp";
ZipUtil.unZip(filename, path);
}
public static void unZip(String sourceFilename, String targetDir) throws IOException {
unZip(new File(sourceFilename), targetDir);
}
/**
* 将sourceFile解压到targetDir
* @param sourceFile
* @param targetDir
* @throws RuntimeException
*/
public static void unZip(File sourceFile, String targetDir) throws IOException {
long start = System.currentTimeMillis();
if (!sourceFile.exists()) {
throw new FileNotFoundException("cannot find the file = " + sourceFile.getPath());
}
ZipFile zipFile = null;
try{
zipFile = new ZipFile(sourceFile);
Enumeration<?> entries = zipFile.entries();
while (entries.hasMoreElements()) {
ZipEntry entry = (ZipEntry) entries.nextElement();
if (entry.isDirectory()) {
String dirPath = targetDir + "/" + entry.getName();
createDirIfNotExist(dirPath);
} else {
File targetFile = new File(targetDir + "/" + entry.getName());
createFileIfNotExist(targetFile);
InputStream is = null;
FileOutputStream fos = null;
try {
is = zipFile.getInputStream(entry);
fos = new FileOutputStream(targetFile);
int len;
byte[] buf = new byte[1024];
while ((len = is.read(buf)) != -1) {
fos.write(buf, 0, len);
}
}finally {
try{
fos.close();
}catch (Exception e){
log.warn("close FileOutputStream exception", e);
}
try{
is.close();
}catch (Exception e){
log.warn("close InputStream exception", e);
}
}
}
}
log.info("解压完成,耗时:" + (System.currentTimeMillis() - start) +" ms");
} finally {
if(zipFile != null){
try {
zipFile.close();
} catch (IOException e) {
log.warn("close zipFile exception", e);
}
}
}
}
public static void createDirIfNotExist(String path){
File file = new File(path);
createDirIfNotExist(file);
}
public static void createDirIfNotExist(File file){
if(!file.exists()){
file.mkdirs();
}
}
public static void createFileIfNotExist(File file) throws IOException {
createParentDirIfNotExist(file);
file.createNewFile();
}
// public static void createParentDirIfNotExist(String filename){
// File file = new File(filename);
// createParentDirIfNotExist(file);
// }
public static void createParentDirIfNotExist(File file){
createDirIfNotExist(file.getParentFile());
}
}
运行
运行ZipUtil.java结果如下,已解压到当前目录