這個是看的別人的文章,然後改過兩行,拿到安卓上來用的
jar下載地址:http://download.csdn.net/detail/qq_24179679/9766252
操作類如下
具體調用
壓縮:
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文件夾不存在");
}
jar下載地址:http://download.csdn.net/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);// 解壓
List headerList = zFile.getFileHeaders();
List extractedFileList = 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 exception
e.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(Zip4jConstants.COMP_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 exception
e.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文件夾不存在");
}