folderutils.java_压缩工具类 - ZipUtils.java

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);

}

}

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值