import java.io.*;
import java.nio.charset.Charset;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
public class ConvertZipFile {
/**
* 解压zip文件
*
* @param zipFilePath zip文件路径
* @param destDir 目标文件路径
*
*/
public void unzip(String zipFilePath,String destDir){
File dir = new File(destDir); //指定目标文件目录
if(!dir.exists()){
//若指定的目标文件目录不存在即创建
dir.mkdir();
}
FileInputStream fileInputStream; //定义文件输入流对象
byte[] buffer = new byte[1024]; //指定缓冲区buffer
try{
//初始化文件输入流
fileInputStream = new FileInputStream(zipFilePath);
//将文件输入流封装成Zip输入流
ZipInputStream zipInputStream = new ZipInputStream(fileInputStream,Charset.forName("gbk"));
//指定zip下的文件入口zipEntry
ZipEntry zipEntry = zipInputStream.getNextEntry();
while(zipEntry!=null){
//判断入口是文件还是文件夹
if(zipEntry.isDirectory()){
//如果入口为文件夹则执行以下步骤
String fileName = zipEntry.getName();
File newFile = new File(destDir+File.separator+fileName);
if(!newFile.exists()){
//若该文件夹不存在即创建
newFile.mkdir();
}
}else{
//如果入口为文件则执行以下步骤
String fileName = zipEntry.getName();
File newFile = new File(destDir+File.separator+fileName);
System.out.println("Unzip file "+newFile.getName()+ " to "+newFile.getAbsolutePath());
FileOutputStream fileOutputStream = new FileOutputStream(newFile);
int length;
while ((length=zipInputStream.read(buffer))>0){
//将zip文件的内容写入到输出流指定的文件中
fileOutputStream.write(buffer,0,length);
}
//关闭文件输出流
fileOutputStream.close();
}
//获取下一个zip文件入口
zipEntry = zipInputStream.getNextEntry();
}
zipInputStream.closeEntry();
zipInputStream.close();
fileInputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
若Source code中的代码解释存在问题,还望读者指正!