这个是看的别人的文章,然后改过两行,拿到安卓上来用的
jar下载地址:/detail/qq_24179679/9766252
操作类如下
import java.io.File;import java.util.ArrayList;import java.util.List;import android.text.TextUtils;import net.lingala.zip4j.core.ZipFile;import net.lingala.zip4j.exception.ZipException;import net.lingala.zip4j.model.FileHeader;import net.lingala.zip4j.model.ZipParameters;import net.lingala.zip4j.util.Zip4jConstants;public class ZipUtil {/*** 解压指定zip文件到指定目录* @param zip zip文件地址* @param dest 解压目录* @param pass 密码* @return* @throws ZipException*/public File[] unzip(String zip, String dest, String pass) throws ZipException {File zipFile = new File(zip);return unZip(zipFile, dest, pass);}/*** 解压指定zip文件到指定目录* @param zipFile zip文件* @param dest解压目录* @param pass 密码* @return* @throws ZipException*/@SuppressWarnings("unchecked")public File[] unZip(File zipFile, String dest, String pass) throws ZipException {ZipFile zFile = new ZipFile(zipFile);zFile.setFileNameCharset("UTF-8");if (!zFile.isValidZipFile()) {throw new ZipException("文件损坏或者非ZIP文件");}File destDir = new File(dest);if (destDir.isDirectory() && !destDir.exists()) {destDir.mkdir();}if (zFile.isEncrypted()) {// 设置密码zFile.setPassword(pass.toCharArray());}zFile.extractAll(dest);// 解压ListheaderList = zFile.getFileHeaders();ListextractedFileList = new ArrayList();for (FileHeader fileHeader : headerList) {if (!fileHeader.isDirectory()) {extractedFileList.add(new File(destDir, fileHeader.getFileName()));}}File[] extractedFiles = new File[extractedFileList.size()];extractedFileList.toArray(extractedFiles);try {zipFile.delete();} catch (Exception e) {// TODO: handle exceptione.printStackTrace();}return extractedFiles;}/*** 压缩指定文件到指定目录下* @param src 被压缩的源文件或者文件夹* @param dest 存放位置,需要具体到压缩后保存的名字,如 ------/xxx.zip* @param pass 解压密码*/public void ZipAddPass(String src, String dest, String pass){File srcFile = new File(src);dest = buildDestinationZipFilePath(srcFile, dest);ZipParameters zipp = new ZipParameters();zipp.setCompressionMethod(P_DEFLATE);//压缩方式zipp.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL);//压缩级别if (!TextUtils.isEmpty(pass)) {//设置解压密码zipp.setEncryptFiles(true);zipp.setEncryptionMethod(Zip4jConstants.ENC_METHOD_STANDARD);zipp.setPassword(pass);}try {ZipFile zipFile = new ZipFile(dest);zipFile.setFileNameCharset("UTF-8");if (srcFile.isDirectory()) {zipFile.addFolder(src, zipp);}else {zipFile.addFile(srcFile, zipp);}} catch (Exception e) {// TODO: handle exceptione.printStackTrace();}}/*** 创建压缩文件存放路径* @param sourceFile 被压缩的文件* @param dest 目标路径* @return 压缩文件存放路径*/private String buildDestinationZipFilePath(File sourceFile, String dest){String result = "";if (TextUtils.isEmpty(dest)) {if (sourceFile.isDirectory()) {result = sourceFile.getParent() + File.separator + sourceFile.getName() + ".zip";}else {String fileName = sourceFile.getName().substring(0, sourceFile.getName().lastIndexOf(".")); result = sourceFile.getParent() + File.separator + fileName + ".zip";}}else {createifnoexit(dest);File destFile = new File(dest);if (destFile.isDirectory()) {if (sourceFile.isDirectory()) {if (dest.endsWith(File.separator)) {result = dest + sourceFile.getName() + ".zip";}else {result = dest + File.separator + sourceFile.getName() + ".zip";}}else {if (dest.endsWith(File.separator)) {result = dest + sourceFile.getName().substring(0, sourceFile.getName().lastIndexOf(".")) + ".zip";}else {result = dest + File.separator + sourceFile.getName().substring(0, sourceFile.getName().lastIndexOf(".")) + ".zip";}}}else {result = dest;}}return result;}private void createifnoexit(String dest){File destFile = null;if (dest.endsWith(File.separator)) {destFile = new File(dest);}else {destFile = new File(dest.substring(0, dest.lastIndexOf(File.separator)));}if (!destFile.exists()) {destFile.mkdirs();}}}
具体调用
压缩:
ZipUtil zipUtil = new ZipUtil();
String src = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "DCIM" + File.separator + "aaa";
String dest = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "DCIM" + File.separator + "c.zip";
zipUtil.ZipAddPass(src, dest, "jieyamima");
解压
ZipUtil zipUtil = new ZipUtil();
String dest = Environment.getExternalStorageDirectory().getAbsolutePath() + "/DCIM";
File mir = new File(dest);
if (mir.exists()) {
try {
File[] files = zipUtil.unzip(dest + "/c.zip", dest, "jieyamima");
if (files != null) {
Log.e("-----------", files.length + "/");
}
for (int i = 0; i < files.length; i++) {
Log.e("-----------", files[i].getAbsolutePath() + "/" + files[i].getName());
}
} catch (ZipException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Log.e("-------", "解压失败" + e.getMessage());
}
}else {
Log.e("-------", "解压失败,DCIM文件夹不存在");
}