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(); } } }