背景

        常我们再开发过程中,无论是Android 客户端程序还是桌面程序,有可能涉及到文件的上传和下载,多文件时通常做zip压缩处理,将多个文件压缩为一个zip包,方便传输,另外,客户端内也可能会涉及到一些资源的下载,这些资源通常都以zip的方式存放在服务器上,客户端可以在合适的时候将zip文件下载,然后解压资源。下面了解一下使用Zip4j框架来压缩和解压处理文件。

 

Zip4j

官网:http://www.lingala.net/zip4j/index.php

可以下载最新的jar (好像下载下来是空的),

下面是我用最新的源码打的jar,你也可以下载这个jar文件,https://download.csdn.net/download/lindroid/10768400

 

使用

下面是封装的一个压缩的工具类, 可以对zip包设置密码,当然你也可以传个null, 不设置密码;

public class ZipUtil {    /**     * 对文件列表压缩加密     * @param srcfile     * @param destZipFile     * @param password     * @return     */    public static File doZipFilesWithPassword(File[] srcfile, String destZipFile, String password) {        if (srcfile == null || srcfile.length == 0) {            return null;        }        ZipParameters parameters = new ZipParameters();        // 压缩方式        parameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE);        // 压缩级别        parameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL);        // 加密方式        if (!TextUtils.isEmpty(password)) {            parameters.setEncryptFiles(true);            parameters.setEncryptionMethod(Zip4jConstants.ENC_METHOD_STANDARD);            parameters.setPassword(password);        }        ArrayList existFileList = new ArrayList();        for (int i = 0; i < srcfile.length; i++) {            if (srcfile[i] != null) {                existFileList.add(srcfile[i]);            }        }        try {            ZipFile zipFile = new ZipFile(destZipFile);            zipFile.addFiles(existFileList, parameters);            return zipFile.getFile();        } catch (ZipException e) {            e.printStackTrace();            return null;        }    }    /**     * 对文件夹加密     * @param folder     * @param destZipFile     * @param password     * @return     */    public static File doZipFilesWithPassword(File folder, String destZipFile, String password) {        if (!folder.exists()) {            return null;        }        ZipParameters parameters = new ZipParameters();        // 压缩方式        parameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE);        // 压缩级别        parameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL);        // 加密方式        if (!TextUtils.isEmpty(password)) {            parameters.setEncryptFiles(true);//            parameters.setEncryptionMethod(Zip4jConstants.ENC_METHOD_STANDARD);            parameters.setPassword(password);        }        try {            ZipFile zipFile = new ZipFile(destZipFile);            zipFile.addFolder(folder, parameters);            return zipFile.getFile();        } catch (ZipException e) {            e.printStackTrace();            return null;        }    }    /**     * 单文件压缩并加密     * @param file 要压缩的zip文件     * @param destZipFile zip保存路径     * @param password 密码   可以为null     * @return     */    public static File doZipSingleFileWithPassword(File file, String destZipFile, String password) {        if (!file.exists()) {            return null;        }        ZipParameters parameters = new ZipParameters();        // 压缩方式        parameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE);        // 压缩级别        parameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL);        // 加密方式        if (!TextUtils.isEmpty(password)) {            parameters.setEncryptFiles(true);//            parameters.setEncryptionMethod(Zip4jConstants.ENC_METHOD_STANDARD);            parameters.setPassword(password);        }        try {            ZipFile zipFile = new ZipFile(destZipFile);            zipFile.addFile(file,parameters);            return zipFile.getFile();        } catch (ZipException e) {            e.printStackTrace();            return null;        }    }/***   解压文件    File:目标zip文件    password:密码,如果没有可以传null    path:解压到的目录路径*/    public static boolean unZip(File file,String password,String path) {    boolean res = false;try {ZipFile zipFile = new ZipFile(file);if (zipFile.isEncrypted()) {     if(password != null && !password.isEmpty()) {    zipFile.setPassword(password);      }    }      zipFile.extractAll(path);    res = true;} catch (ZipException e) {// TODO Auto-generated catch blocke.printStackTrace();}  return res;    }}

 

工具类中的几个方法基本都是对zip4j 提供的api的简单封装,主要是ZipFile类和ZipParameters 类 , 可以参考继续封装一些更简单的方法出来。

 

更多相关文章

  1. 第一次尝试翻译本书
  2. Android原生和React Native 混合旧项目的开发环境搭建及打包
  3. (续)Android热更新:Tinker热修复与Walle多渠道打包
  4. android程序---->android多线程下载(一)
  5. 2011.8.17---2011.8.18 续(android的classloader)
  6. 彻底弄明白Gradle相关配置
  7. Android(安卓)studio代码混淆
  8. Android热修复原理总结
  9. Android软件如何进行推广?十种推广方式可以值得借鉴

随机推荐

  1. Linux第三章 命令基本格式及文件处理命令
  2. 弱智入门Linux——拉高CPU使用率
  3. gdb捕获syscall条件和字符串比较
  4. Linux命令-网络命令:netstat
  5. 学linux向那方面发展比较好
  6. 【Linux】Linux下使用wget 命令下载JDK7
  7. 我是这样学习Linux下C语言编程的-编译命
  8. Debian 7开启ssh、telnet
  9. Linux如何查找大文件
  10. linux中ioremap与ioremap_cachable的区别