/**
* 解壓縮含有檔案夾的壓縮檔
*
* @param zipFile
* @param folderPath
* @throws ZipException
* @throws IOException
*/
public void upZipFile(File zipFile, String folderPath) throws ZipException,
IOException {
File desDir = new File(folderPath);
if (!desDir.exists()) {
// 建立目標目錄
desDir.mkdirs();
}
ZipFile zf = new ZipFile(zipFile);
for (Enumeration<?> entries = zf.entries(); entries.hasMoreElements();) {
ZipEntry entry = ((ZipEntry) entries.nextElement());
if (entry.isDirectory()) {
String tmpStr = folderPath + File.separator + entry.getName();
tmpStr = new String(tmpStr.getBytes("8859_1"), "GB2312");
File folder = new File(tmpStr);
folder.mkdirs();
} else {
InputStream is = zf.getInputStream(entry);
String str = folderPath + File.separator + entry.getName();
// 轉換編碼,避免中文時亂碼
str = new String(str.getBytes("8859_1"), "GB2312");
File desFile = new File(str);
if (!desFile.exists()) {
// 建立目標檔案
desFile.createNewFile();
}
OutputStream os = new FileOutputStream(desFile);
byte[] buffer = new byte[1024];
int realLength;
while ((realLength = is.read(buffer)) > 0) {
os.write(buffer, 0, realLength);
os.flush();
}
is.close();
os.close();
}
}
zf.close();
}
/**
* 解壓縮不含檔案夾的壓縮包
*
* @param zipFile
* @param folderPath
* @throws ZipException
* @throws IOException
*/
public void upZipFile(File zipFile, String folderPath) throws ZipException,
IOException {
File desDir = new File(folderPath);
if (!desDir.exists()) {
// 建立目標目錄
desDir.mkdirs();
}
ZipFile zf = new ZipFile(zipFile);
for (Enumeration<?> entries = zf.entries(); entries.hasMoreElements();) {
ZipEntry entry = ((ZipEntry) entries.nextElement());
InputStream is = zf.getInputStream(entry);
String str = folderPath + File.separator + entry.getName();
// 轉換編碼,避免中文時亂碼
str = new String(str.getBytes("8859_1"), "GB2312");
File desFile = new File(str);
if (!desFile.exists()) {
File fileParentDir = desFile.getParentFile();
if (!fileParentDir.exists()) {
// 建立目標檔案的父目錄
fileParentDir.mkdirs();
}
// 建立目標檔案
desFile.createNewFile();
}
OutputStream os = new FileOutputStream(desFile);
byte[] buffer = new byte[1024];
int realLength;
while ((realLength = is.read(buffer)) > 0) {
os.write(buffer, 0, realLength);
os.flush();
}
is.close();
os.close();
}
zf.close();
}