Android zip4j压缩、解压、加解密的示例代码

 更新时间:2017年12月28日 08:39:46   作者:小王_同志  
本篇文章主要介绍了Android zip4j压缩、解压、加解密的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

jdk有原生的zip包,因为用起来没有达到想要的效果,所以此次用的是第三方zip4j开源

zip4j.jar官网下载链接

直接代码:

package com.dfxh.wang.compress_operate;

import android.util.Log;

import net.lingala.zip4j.core.ZipFile;
import net.lingala.zip4j.exception.ZipException;
import net.lingala.zip4j.model.ZipParameters;
import net.lingala.zip4j.util.Zip4jConstants;

import java.io.File;

/**
 * Created by WangChaowei on 2017/12/27.
 *
 * 此类是用第三方开源的zip4j操作文件(目录)的压缩、解压、加解密
 */

public class CompressOperate_zip4j {
  private ZipFile zipFile;
  private ZipParameters zipParameters;
  private int result = 0; //状态返回值

  private static final String TAG = "CompressOperate_zip4j";

  /**
   * zip4j压缩
   * @param filePath 要压缩的文件路径(可文件,可目录)
   * @param zipFilePath zip生成的文件路径
   * @param password 密码
   * @return 状态返回值
   */
  public int compressZip4j(String filePath, String zipFilePath, String password) {
    File sourceFile = new File(filePath);
    File zipFile_ = new File(zipFilePath);
    try {
      zipFile = new ZipFile(zipFile_);
      zipFile.setFileNameCharset("GBK"); //设置编码格式(支持中文)

      zipParameters = new ZipParameters();
      zipParameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE); //压缩方式
      zipParameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL); // 压缩级别
      if (password != null && password != "") {  //是否要加密(加密会影响压缩速度)
        zipParameters.setEncryptFiles(true);
        zipParameters.setEncryptionMethod(Zip4jConstants.ENC_METHOD_STANDARD); // 加密方式
        zipParameters.setPassword(password.toCharArray());
      }

      if (zipFile_.isDirectory()) {
        String sourceFileName = checkString(sourceFile.getName()); //文件校验
        zipFilePath = zipFilePath + "/" + sourceFileName + ".zip";
        Log.i(TAG, "保存压缩文件的路径(zipFilePath):" + zipFilePath);
        compressZip4j(filePath,zipFilePath,password);
      }
      if (sourceFile.isDirectory()) {
        // File[] files = sourceFile.listFiles();
        // ArrayList<File> arrayList = new ArrayList<File>();
        // Collections.addAll(arrayList, files);
        zipFile.addFolder(sourceFile, zipParameters);
      } else {
        zipFile.addFile(sourceFile, zipParameters);
      }
      Log.i(TAG, "compressZip4j: 压缩成功");
    } catch (ZipException e) {
      Log.e(TAG, "compressZip4j: 异常:" + e);
      result = -1;
      return result;
    }
    return result;
  }

  /**
   * 校验提取出的原文件名字是否带格式
   * @param sourceFileName 要压缩的文件名
   * @return
   */
  private String checkString(String sourceFileName){
    if (sourceFileName.indexOf(".") > 0){
      sourceFileName = sourceFileName.substring(0,sourceFileName.length() - 4);
      Log.i(TAG, "checkString: 校验过的sourceFileName是:" + sourceFileName);
    }
    return sourceFileName;
  }

  /**
   * zip4j解压
   * @param zipFilePath 待解压的zip文件(目录)路径
   * @param filePath 解压到的保存路径
   * @param password 密码
   * @return 状态返回值
   */
  public int uncompressZip4j(String zipFilePath, String filePath, String password) {
    File zipFile_ = new File(zipFilePath);
    File sourceFile = new File(filePath);

    try {
      zipFile = new ZipFile(zipFile_);
      zipFile.setFileNameCharset("GBK"); //设置编码格式(支持中文)
      if (!zipFile.isValidZipFile()){   //检查输入的zip文件是否是有效的zip文件
        throw new ZipException("压缩文件不合法,可能被损坏.");
      }
      if (sourceFile.isDirectory() && !sourceFile.exists()) {
        sourceFile.mkdir();
      }
      if (zipFile.isEncrypted()) {
        zipFile.setPassword(password.toCharArray());
      }
      zipFile.extractAll(filePath); //解压
      Log.i(TAG, "uncompressZip4j: 解压成功");

    } catch (ZipException e) {
      Log.e(TAG, "uncompressZip4j: 异常:"+ e);
      result = -1;
      return result;
    }
    return result;
  }

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Android实现计步器功能

    Android实现计步器功能

    这篇文章主要为大家详细介绍了Android实现计步器功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-03-03
  • Android WebView使用的技巧与一些坑

    Android WebView使用的技巧与一些坑

    这篇文章主要为大家详细介绍了Android WebView使用的技巧与一些坑,感兴趣的小伙伴们可以参考一下
    2016-06-06
  • Android UI系列-----Dialog对话框示例

    Android UI系列-----Dialog对话框示例

    本篇文章主要介绍了Android UI系列-----Dialog对话框示例,在界面上弹出一个Dialog对话框使我们经常需要做的,有需要的可以了解一下。
    2017-01-01
  • Android 滑动返回Activity的实现代码

    Android 滑动返回Activity的实现代码

    这篇文章主要介绍了Android 滑动返回Activity的实现代码的相关资料,这里是访微信滑动返回主页的功能,需要的朋友可以参考下
    2017-07-07
  • Android Handler,Message,MessageQueue,Loper源码解析详解

    Android Handler,Message,MessageQueue,Loper源码解析详解

    这篇文章主要介绍了Android Handler,Message,MessageQueue,Loper源码解析详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-09-09
  • 不可不知的Android strings.xml那些事

    不可不知的Android strings.xml那些事

    相信 strings.xml 已经是大家在 Android 开发中最熟悉的文件之一了,但其实它也有很多需要注意的地方和一些小技巧,知道了这些可以让你的 Android 应用更加规范易用,大家来看看吧
    2016-08-08
  • 使用IntelliJ IDEA 配置安卓(Android)开发环境的教程详解(新手必看)

    使用IntelliJ IDEA 配置安卓(Android)开发环境的教程详解(新手必看)

    这篇文章主要介绍了使用IntelliJ IDEA 配置安卓(Android)开发环境的教程详解(新手必看),本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-09-09
  • Android获取手机联系人的方法

    Android获取手机联系人的方法

    这篇文章主要介绍了Android 获取系统联系人信息的实例的相关资料,希望通过本文大家能实现这样的功能,需要的朋友可以参考下
    2017-09-09
  • Android实现中文按拼音排序方法

    Android实现中文按拼音排序方法

    这篇文章主要为大家详细介绍了Android实现中文按拼音排序方法,很实用,感兴趣的小伙伴们可以参考一下
    2016-03-03
  • Android编程之方向传感器用法示例

    Android编程之方向传感器用法示例

    这篇文章主要介绍了Android编程之方向传感器用法,结合实例形式分析了Android方向传感器的定义、监听及事件响应相关操作技巧,需要的朋友可以参考下
    2017-08-08

最新评论