1.网上下载zip4j_1.3.1.jar
2.只压缩文件以及压缩文件夹
(1)压缩两个不同路径的文件夹到一个压缩包中
ArrayList listfolder = new ArrayList();
listfolder.add(Environment.getExternalStorageDirectory()+"/demo");
listfolder.add(Environment.getExternalStorageDirectory()+"/zip");
yasuo.zipAll(filesToAdd, listfolder, Environment.getExternalStorageDirectory().toString()+"/DrawingData/demo1.zip");
(2)压缩不同路径的文件到一个压缩包中
ZipFile zipFile;
try {
zipFile = new ZipFile(Environment.getExternalStorageDirectory().toString()+"/DrawingData/demo1.zip");
ArrayList filesToAdd = new ArrayList();
filesToAdd.add(new File(Environment.getExternalStorageDirectory().toString()+"/DrawingData/history_favorites.txt"));
filesToAdd.add(new File(Environment.getExternalStorageDirectory().toString()+"/DrawingData/deletecomment.png"));
filesToAdd.add(new File(Environment.getExternalStorageDirectory().toString()+"/DrawingData/xfont.jff"));
filesToAdd.add(new File(Environment.getExternalStorageDirectory().toString()+"/Updaterssss.apk"));
ZipParameters parameters = new ZipParameters();
parameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE);
parameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL);
zipFile.addFiles(filesToAdd, parameters);
String folderToAdds =Environment.getExternalStorageDirectory()+"/demo";
zipFile.addFolder(folderToAdds, parameters);
} catch (ZipException e1) {
// // TODO Auto-generated catch block
e1.printStackTrace();
}
(3)压缩一个文件夹到一个压缩包中
yasuo.zip(Environment.getExternalStorageDirectory()+"/demo", Environment.getExternalStorageDirectory().toString()+"/DrawingData/demo.zip");
公共类:
import java.io.File;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import android.text.TextUtils;
import net.lingala.zip4j.core.ZipFile;
import net.lingala.zip4j.exception.ZipException;
import net.lingala.zip4j.model.ZipParameters;
import net.lingala.zip4j.util.Zip4jConstants;
public class yasuo {
/**
* 使用给定密码压缩指定文件或文件夹到指定位置.
* dest可传最终压缩文件存放的绝对路径,也可以传存放目录,也可以传null或者"".<br />
* 如果传null或者""则将压缩文件存放在当前目录,即跟源文件同目录,压缩文件名取源文件名,以.zip为后缀;<br />
* 如果以路径分隔符(File.separator)结尾,则视为目录,压缩文件名取源文件名,以.zip为后缀,否则视为文件名.
* @param src 要压缩的文件或文件夹路径
* @param dest 压缩文件存放路径
* @return 最终的压缩文件存放的绝对路径,如果为null则说明压缩失败.
*/
public static String zip(String src, String dest) {
File srcFile = new File(src);
dest = buildDestinationZipFilePath(srcFile, dest);
ZipParameters parameters = new ZipParameters();
parameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE); // 压缩方式
parameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL); // 压缩级别
try {
ZipFile zipFile = new ZipFile(dest);
if (srcFile.isDirectory()) {
zipFile.addFolder(srcFile, parameters);
} else {
zipFile.addFile(srcFile, parameters);
}
return dest;
} catch (ZipException e) {
e.printStackTrace();
}
return null;
}
/**
*
* @param listfile 文件列表
* @param listfolder 文件夹列表
* @param dest 目的地址
* @return
*/
public static String zipAll(ArrayList<String> listfile, ArrayList<String> listfolder ,String dest){
try {
ZipFile zipFile = new ZipFile(dest);
ZipParameters parameters = new ZipParameters();
parameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE);
parameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL);
zipFile.addFiles(listfile, parameters);
Iterator<String> it=listfolder.iterator();
while(it.hasNext()){
zipFile.addFolder(it.next(), parameters);
}
} catch (ZipException e) {
e.printStackTrace();
}
return null;
}
/**
* 构建压缩文件存放路径,如果不存在将会创建
* 传入的可能是文件名或者目录,也可能不传,此方法用以转换最终压缩文件的存放路径
* @param srcFile 源文件
* @param destParam 压缩目标路径
* @return 正确的压缩文件存放路径
*/
private static String buildDestinationZipFilePath(File srcFile,String destParam) {
if (TextUtils.isEmpty(destParam)) {
if (srcFile.isDirectory()) {
destParam = srcFile.getParent() + File.separator + srcFile.getName() + ".zip";
} else {
String fileName = srcFile.getName().substring(0, srcFile.getName().lastIndexOf("."));
destParam = srcFile.getParent() + File.separator + fileName + ".zip";
}
} else {
createDestDirectoryIfNecessary(destParam); // 在指定路径不存在的情况下将其创建出来
if (destParam.endsWith(File.separator)) {
String fileName = "";
if (srcFile.isDirectory()) {
fileName = srcFile.getName();
} else {
fileName = srcFile.getName().substring(0, srcFile.getName().lastIndexOf("."));
}
destParam += fileName + ".zip";
}
}
return destParam;
}
/**
* 在必要的情况下创建压缩文件存放目录,比如指定的存放路径并没有被创建
* @param destParam 指定的存放路径,有可能该路径并没有被创建
*/
private static void createDestDirectoryIfNecessary(String destParam) {
File destDir = null;
if (destParam.endsWith(File.separator)) {
destDir = new File(destParam);
} else {
destDir = new File(destParam.substring(0, destParam.lastIndexOf(File.separator)));
}
if (!destDir.exists()) {
destDir.mkdirs();
}
}
}