Android/Java 压缩/解压/加密文件/zip
16lz
2021-01-26
背景
常我们再开发过程中,无论是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 类 , 可以参考继续封装一些更简单的方法出来。
更多相关文章
- 第一次尝试翻译本书
- Android原生和React Native 混合旧项目的开发环境搭建及打包
- (续)Android热更新:Tinker热修复与Walle多渠道打包
- android程序---->android多线程下载(一)
- 2011.8.17---2011.8.18 续(android的classloader)
- 彻底弄明白Gradle相关配置
- Android(安卓)studio代码混淆
- Android热修复原理总结
- Android软件如何进行推广?十种推广方式可以值得借鉴