package Zip;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.util.Enumeration;
import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipFile;
public class ExtraExcel {
private ZipFile zipFile;
/**
* 解压zip包
* @param zipFilePath zip文件路径
* @param targetPath 解压缩到的位置,如果为null或空字符串则默认解压缩到跟zip包同目录跟zip包同名的文件夹下
*/
public void unZip(String zipFilePath,String targetPath){//unZipfileName需要解压的zip文件名
OutputStream fileOut;
File file;
InputStream inputStream;
try{
//生成一个zip的文件
this.zipFile = new ZipFile(zipFilePath);
String directoryPath = "";
if(null == targetPath || "".equals(targetPath)){
directoryPath = zipFilePath.substring(0,zipFilePath.lastIndexOf("."));
}else{
directoryPath = targetPath;
}
//遍历zipFile中所有的实体,并把他们解压出来
for(Enumeration entries = this.zipFile.getEntries(); entries.hasMoreElements();){
ZipEntry entry = (ZipEntry)entries.nextElement();
//生成他们解压后的一个文件
file = new File(entry.getName());
//文件还是目录的判断 isDirectory()=true<目录>
if(entry.isDirectory()){
String directoryPath1 = directoryPath + File.separator + file;
System.out.println(directoryPath1);
File file1 = new File(directoryPath1);
if(!file1.exists()){
file1.mkdirs();
}
continue;
}else{
File targetFile = buildFile(directoryPath + File.separator + file, false);
System.out.println(targetFile);
fileOut = new BufferedOutputStream(new FileOutputStream(targetFile));
inputStream = this.zipFile.getInputStream(entry);
//开辟缓冲区
byte[] buffer = new byte[1024];
int readLen = 0;
while((readLen = inputStream.read(buffer, 0, 1024)) >= 0){
fileOut.write(buffer, 0, readLen);
}
fileOut.close();
inputStream.close();
}
}
this.zipFile.close();
}catch(IOException ioe){
ioe.printStackTrace();
}
}
/**
* 生产文件 如果文件所在路径不存在则生成路径
* @param fileName 文件名 带路径
* @param isDirectory 是否为路径
* @return
*/
public static File buildFile(String fileName, boolean isDirectory) {
File target = new File(fileName);
if (isDirectory) {
target.mkdirs();
} else {
if (!target.getParentFile().exists()) {
target.getParentFile().mkdirs();
target = new File(target.getAbsolutePath());
}
}
return target;
}
public static void main(String[] args) {
String filePath = "C:\Users\Documents\1111.zip";
String destination = "C:\Users\Documents\work";
File file = new File(filePath);
String fileName = file.getName();
ExtraExcel ee = new ExtraExcel();
ee.unZip(filePath,destination);
}
}