package cn.liuc.util;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Enumeration;
import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipFile;
public class ZipByOriginalExtractUtil {
public static ArrayList<String> unzipFile(String zipFilePath) {
String path = zipFilePath.replaceAll("\\\\", "/");
String outputDirectory = path.substring(0, path.lastIndexOf("."))+"/";
return unZip(zipFilePath, outputDirectory);
}
/**
* 生存文件夹
*
* @param directory
* 解压文件存放文件夹
* @param subDirectory
* 子文件夹(没有时可传入空字符串)
*/
private static void createDirectory(String directory, String subDirectory) {
String dir[];
File fl = new File(directory);
try {
if (subDirectory == "" && fl.exists() != true)
fl.mkdir();
else if (subDirectory != "") {
dir = subDirectory.replace('\\', '/').split("/");
for (int i = 0; i < dir.length; i++) {
File subFile = new File(directory + File.separator + dir[i]);
if (subFile.exists() == false)
subFile.mkdir();
directory += File.separator + dir[i];
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 解压指定的ZIP文件
*
* @param unZipFileName
* 文件名称字符串(包括路径)
* @param outputDirectory
* 解压后存放文件夹
* @return
*/
public static ArrayList<String> unZip(String unZipFileName,
String outputDirectory) {
ArrayList<String> unzipFileList = new ArrayList<String>();
int readedBytes;
FileOutputStream fileOutStream=null;
byte[] buff = new byte[1024];
// File file;
InputStream inputStream=null;
ZipFile zipFile = null;
try {
createDirectory(outputDirectory, "");
if (System.getProperty("os.name").toLowerCase().indexOf("windows") >= 0) {
zipFile = new ZipFile(unZipFileName, "GBK");
} else if (System.getProperty("os.name").toLowerCase()
.indexOf("linux") >= 0) {
zipFile = new ZipFile(unZipFileName, "UTF-8");
}
for (Enumeration<ZipEntry> entries = zipFile.getEntries(); entries
.hasMoreElements();) {
ZipEntry entry = (ZipEntry) entries.nextElement();
if (entry.isDirectory()) {
// 是文件夹。则创建之
String name = entry.getName().substring(0,
entry.getName().length() - 1);
File f = new File(outputDirectory + File.separator + name);
f.mkdir();
// file.mkdirs();
} else {
// 是文件
String fileName = entry.getName().replaceAll("\\\\", "/");
String path = outputDirectory + "/" + fileName;
File f = new File(path);
f.createNewFile();
inputStream = zipFile.getInputStream(entry);
fileOutStream = new FileOutputStream(f);
while ((readedBytes = inputStream.read(buff)) > 0) {
fileOutStream.write(buff, 0, readedBytes);
}
fileOutStream.close();
inputStream.close();
unzipFileList.add(path);
}
}
zipFile.close();
} catch (Exception e) {
e.printStackTrace();
}finally{
if (inputStream!=null) {
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (fileOutStream!=null) {
try {
fileOutStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return unzipFileList;
}
/**
*
* \brief 測试
*
* @param args
* @throws Exception
* @attention 方法的使用注意事项
* @author liuchao
* @date 2013-9-13
* @note begin modify by 改动人 改动时间 改动内容摘要说明
*/
public static void main(String[] args) throws Exception {
unzipFile("E:\\专家协同解决方式.zip");
}
}