import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Enumeration;
import java.util.zip.CRC32;
import java.util.zip.CheckedInputStream;
//使用org.apache.tools.zip这个就不会中文乱码
import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipFile;
public class TestLambda {
public static void main(String[] args){
try {
unZipFile("D:\\opt\\risk.zip","d:\\opt\\risk\\");
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* @param filePath 源文件路径
* @param outPath 文件路径
* */
private static void unZipFile(String filePath,String outPath) throws Exception {
// 压缩文件的实列,并设置编码
ZipFile zipFile = new ZipFile(filePath,"GBK");
File file;
// 获取压缩文中的所以项
for(Enumeration<ZipEntry> enumeration = zipFile.getEntries(); enumeration.hasMoreElements();) {
// 获取元素
ZipEntry zipEntry = enumeration.nextElement();
// 排除空文件夹
if(!zipEntry.getName().endsWith(File.separator)) {
System.out.println("正在解压文件:"+zipEntry.getName());
String filename = zipEntry.getName();
boolean ismkdir = false;
// 检查此文件是否带有文件夹
if(filename.lastIndexOf("/") != -1){
ismkdir = true;
}
filename = outPath + filename;
// 如果是文件夹先创建
if(zipEntry.isDirectory()){
file = new File(filename);
file.mkdirs();
continue;
}
file = new File(filename);
if(!file.exists()){
// 如果是目录先创建
if(ismkdir){
new File(filename.substring(0, filename.lastIndexOf("/"))).mkdirs(); //目录先创建
}
}
OutputStream os = new FileOutputStream(filename);//创建解压后的文件
BufferedOutputStream bos = new BufferedOutputStream(os);//带缓的写出流
InputStream is = zipFile.getInputStream(zipEntry);//读取元素
BufferedInputStream bis = new BufferedInputStream(is);//读取流的缓存流
CheckedInputStream cos = new CheckedInputStream(bis, new CRC32());//检查读取流,采用CRC32算法,保证文件的一致性
byte [] b = new byte[1024];//字节数组,每次读取1024个字节
// 循环读取压缩文件的值
while(cos.read(b)!=-1) {
// 写入到新文件
bos.write(b);
}
cos.close();
bis.close();
is.close();
bos.close();
os.close();
} else {
// 如果为空文件夹,则创建该文件夹
new File(outPath+zipEntry.getName()).mkdirs();
}
}
System.out.println("解压完成");
zipFile.close();
}
}