importjava.io.BufferedInputStream;importjava.io.BufferedOutputStream;importjava.io.File;importjava.io.FileInputStream;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.InputStream;importjava.util.Enumeration;importorg.apache.commons.io.FilenameUtils;importorg.apache.commons.io.IOUtils;importorg.apache.commons.lang.ArrayUtils;importorg.apache.commons.lang.StringUtils;importorg.apache.tools.zip.ZipEntry;importorg.apache.tools.zip.ZipFile;importorg.apache.tools.zip.ZipOutputStream;/*** 压缩工具类
**/
public classZipUtils {private static final String DEFAULT_CHARSET = "UTF-8";/*** 压缩文件夹
*
*@paramzipFileName
* 打包后文件的名称,含路径
*@paramsourceFolder
* 需要打包的文件夹或者文件的路径
*@paramzipPathName
* 打包目的文件夹名,为空则表示直接打包到根*/
public static void zip(String zipFileName, String sourceFolder, String zipPathName) throwsException {
ZipOutputStream out= null;try{
File zipFile= newFile(zipFileName);
FolderUtils.mkdirs(zipFile.getParent());
out= newZipOutputStream(zipFile);
out.setEncoding(DEFAULT_CHARSET);if(StringUtils.isNotBlank(zipPathName)) {
zipPathName= FilenameUtils.normalizeNoEndSeparator(zipPathName, true) + "/";
}else{
zipPathName= "";
}
zip(out, sourceFolder, zipPathName);
}catch(IOException e) {
e.printStackTrace();throw newException(e);
}finally{
IOUtils.closeQuietly(out);
}
}/*** 压缩文件夹
*
*@paramzipFile
* a {@linkjava.lang.String} object.
*@paramsource
* a {@linkjava.lang.String} object.*/
public static void zip(String zipFile, String source) throwsException {
File file= newFile(source);
zip(zipFile, source, file.isFile()?StringUtils.EMPTY : file.getName());
}/*** 压缩文件夹
*
*@paramzipFile
* a {@linkjava.io.File} object.
*@paramsource
* a {@linkjava.io.File} object.*/
public static void zip(File zipFile, File source) throwsException {
zip(zipFile.getAbsolutePath(), source.getAbsolutePath());
}private static void zip(ZipOutputStream zos, String file, String pathName) throwsIOException {
File file2zip= newFile(file);if(file2zip.isFile()) {
zos.putNextEntry(new ZipEntry(pathName +file2zip.getName()));
IOUtils.copy(newFileInputStream(file2zip.getAbsolutePath()), zos);
zos.flush();
zos.closeEntry();
}else{
File[] files=file2zip.listFiles();if(ArrayUtils.isNotEmpty(files)) {for(File f : files) {if(f.isDirectory()) {
zip(zos, FilenameUtils.normalizeNoEndSeparator(f.getAbsolutePath(),true),
FilenameUtils.normalizeNoEndSeparator(pathName+ f.getName(), true) + "/");
}else{
zos.putNextEntry(new ZipEntry(pathName +f.getName()));
IOUtils.copy(newFileInputStream(f.getAbsolutePath()), zos);
zos.flush();
zos.closeEntry();
}
}
}
}
}/*** 解压
*
*@paramfromZipFile
* zip文件路径
*@paramunzipPath
* 解压路径*/@SuppressWarnings("unchecked")public static final void unzip(String fromZipFile, String unzipPath) throwsException {
FileOutputStream fos= null;
InputStream is= null;
String path1=StringUtils.EMPTY;
String tempPath=StringUtils.EMPTY;if (!newFile(unzipPath).exists()) {newFile(unzipPath).mkdir();
}
ZipFile zipFile= null;try{
zipFile= newZipFile(fromZipFile, DEFAULT_CHARSET);
}catch(IOException e1) {
e1.printStackTrace();throw newException(e1);
}
File temp= newFile(unzipPath);
String strPath=temp.getAbsolutePath();
Enumeration enu =zipFile.getEntries();
ZipEntry zipEntry= null;while(enu.hasMoreElements()) {
zipEntry=(ZipEntry) enu.nextElement();
path1=zipEntry.getName();if(zipEntry.isDirectory()) {
tempPath= FilenameUtils.normalizeNoEndSeparator(strPath + File.separator + path1, true);
File dir= newFile(tempPath);
dir.mkdirs();continue;
}else{
BufferedInputStream bis= null;
BufferedOutputStream bos= null;try{
is=zipFile.getInputStream(zipEntry);
bis= newBufferedInputStream(is);
path1=zipEntry.getName();
tempPath= FilenameUtils.normalizeNoEndSeparator(strPath + File.separator + path1, true);
FolderUtils.mkdirs(newFile(tempPath).getParent());
fos= newFileOutputStream(tempPath);
bos= newBufferedOutputStream(fos);
IOUtils.copy(bis, bos);
}catch(IOException e) {
e.printStackTrace();throw newException(e);
}finally{
IOUtils.closeQuietly(bis);
IOUtils.closeQuietly(bos);
IOUtils.closeQuietly(is);
IOUtils.closeQuietly(fos);
}
}
}
}
}