依赖
package cn.yihuazt.stm.util;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.taskdefs.Expand;
import org.apache.tools.ant.taskdefs.Zip;
import org.apache.tools.ant.types.FileSet;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Http输入输出流转换工具
*
*/
public class ZipUtils{
private static Logger logger = LoggerFactory.getLogger(ZipUtils.class);
/**
* 解压文件(apache)
*
* @param sourceZip
* 源zip文件. 如:c:/upload.zip
* @param destDir
* 解压后的路径. 如:c:/a
* @param encoding
* 解码编码方式.默认GBK
*/
public static void unZip(String sourceZip, String destDir, String encoding)
{
String defaultEncoding = encoding;
if (defaultEncoding == null || defaultEncoding.isEmpty())
{
defaultEncoding = "GBK"; // 默认编码为GBK
}
Project project = new Project();
Expand expand = new Expand();
expand.setEncoding(defaultEncoding); // 设置解压编码方式
expand.setProject(project);
expand.setSrc(new File(sourceZip)); // 设置目标zip文件File对象
expand.setDest(new File(destDir)); // 设置解压后的File对象
expand.setOverwrite(true); // 是否覆盖
expand.execute();
logger.info("---------压缩包解压成功");
}
/**
* 压缩文件(apache)
*
* @param sourceFile
* 压缩的源文件. 如: c:/upload
* @param targetZip
* 生成的目标文件. 如:c:/upload.zip
* @param encoding
* 压缩编码方式.默认GBK
*/
public static void zip(String sourceFile, String targetZip, String encoding)
{
String defaultEncoding = encoding;
if (defaultEncoding == null || defaultEncoding.isEmpty())
{
defaultEncoding = "GBK"; // 默认编码为GBK
}
Project project = new Project();
Zip zip = new Zip();
zip.setProject(project);
zip.setDestFile(new File(targetZip)); // 设置生成的目标zip文件File对象
zip.setEncoding(defaultEncoding);
FileSet fileSet = new FileSet();
fileSet.setProject(project);
fileSet.setDir(new File(sourceFile)); // 设置将要进行压缩的源文件File对象
// fileSet.setIncludes("**/*.java"); //包括哪些文件或文件夹,只压缩目录中的所有java文件
// fileSet.setExcludes("**/*.java"); //排除哪些文件或文件夹,压缩所有的文件,排除java文件
zip.addFileset(fileSet);
zip.execute();
}
/**
* 获得压缩文件的解压后的第一层文件名
* @param file
* 源zip文件. 如:c:/upload.zip
* @return
*/
@SuppressWarnings("rawtypes")
public static List<String> getFirstFileNames(String file){
List<String> fileNames = new ArrayList<String>();
ZipFile zipFile = null;
try {
zipFile = new ZipFile(file);
Enumeration entries = zipFile.entries();
while (entries.hasMoreElements()) {
ZipEntry zipEntry = (ZipEntry) entries.nextElement();
if (zipEntry.getName().indexOf("/") < 0) {
fileNames.add(zipEntry.getName());
}
}
}
catch (IOException e) {
logger.error(String.format("IOException:[%s]", e));
}
finally {
if (zipFile != null) {
try {
zipFile.close();
}
catch (IOException e) {
logger.error(String.format("IOException:[%s]", e));
}
}
}
return fileNames;
}
}