importjava.io.File;importjava.io.FileInputStream;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.InputStream;importjava.io.OutputStream;importorg.apache.commons.compress.archivers.ArchiveEntry;importorg.apache.commons.compress.archivers.zip.Zip64Mode;importorg.apache.commons.compress.archivers.zip.ZipArchiveEntry;importorg.apache.commons.compress.archivers.zip.ZipArchiveInputStream;importorg.apache.commons.compress.archivers.zip.ZipArchiveOutputStream;public classZipHelper {public static voidmain(String[] args) {
File[] files=new File[1];
File tmpFile=new File("F:\\ios10.8.2\\macos.dmg");
files[0] =tmpFile;
File zipFile=new File("F:\\ios10.8.2\\test.zip");
ZipHelper.zipFiles(files, zipFile);
}public static booleanzipFiles(File[] files, File zipFile) {boolean flag = false;if (files != null && files.length > 0) {
ZipArchiveOutputStream zaos= null;try{
zaos= newZipArchiveOutputStream(zipFile);//Use Zip64 extensions for all entries where they are required
zaos.setUseZip64(Zip64Mode.AsNeeded);//将每个文件用ZipArchiveEntry封装//再用ZipArchiveOutputStream写到压缩文件中
for(File file : files) {if (file != null) {
ZipArchiveEntry zipArchiveEntry= newZipArchiveEntry(file, file.getName());
zaos.putArchiveEntry(zipArchiveEntry);
InputStream is= null;try{
is= newFileInputStream(file);byte[] buffer = new byte[1024 * 5];int len = -1;while ((len = is.read(buffer)) != -1) {//把缓冲区的字节写入到ZipArchiveEntry
zaos.write(buffer, 0, len);
}
zaos.closeArchiveEntry();
}catch(Exception e) {
flag= false;
}finally{if (is != null)
is.close();
}
}
}
zaos.finish();
flag=true;
}catch(Exception e) {
flag= false;
}finally{try{if (zaos != null) {
zaos.close();
}
}catch(IOException e) {
flag= false;
}
}
}returnflag;
}/*** 解压缩ZIP文件,将ZIP文件里的内容解压到saveFileDir目录下
*@paramzipFilePath 待解压缩的ZIP文件名
*@paramsaveFileDir 目标目录*/
public static booleanupzipFile(String zipFilePath, String saveFileDir) {boolean flag = false;
File file= newFile(zipFilePath);if(file.exists()) {
InputStream is= null;
ZipArchiveInputStream zais= null;try{
is= newFileInputStream(file);
zais= newZipArchiveInputStream(is);
ArchiveEntry archiveEntry= null;//把zip包中的每个文件读取出来//然后把文件写到指定的文件夹
while ((archiveEntry = zais.getNextEntry()) != null) {//获取文件名
String entryFileName =archiveEntry.getName();//构造解压出来的文件存放路径
String entryFilePath = saveFileDir +entryFileName;byte[] content = new byte[(int) archiveEntry.getSize()];
zais.read(content);
OutputStream os= null;try{//把解压出来的文件写到指定路径
File entryFile = newFile(entryFilePath);
os= newFileOutputStream(entryFile);
os.write(content);
}catch(IOException e) {
flag= false;
}finally{if (os != null) {
os.flush();
os.close();
}
}
}
flag=true;
}catch(Exception e) {
flag= false;
}finally{try{if (zais != null) {
zais.close();
}if (is != null) {
is.close();
}
}catch(IOException e) {
flag= false;
}
}
}returnflag;
}
}