zip4j的简单运用
有的时候项目需要压缩一些文件进行上传,或者从云端下载后进行解压,便需要ZipOutputStream,过程主要是新建一
个压缩文件,然后拷贝所有的文件,拷贝过程中添加新的文件进去,速度比较慢。
既然麻烦,那就可以用别人给的轮子,于是就发现了zip4j。
引入
net.lingala.zip4j
zip4j
2.2.1
或者
implementation "net.lingala.zip4j:zip4j:2.2.1"
压缩文件指定文件压缩
// 初始化一个压缩包,生成在储存卡根目录
String sdcard = Environment.getExternalStorageDirectory().getAbsolutePath();
ZipFile zipfile = new ZipFile(sdcard + "/a.zip");
ZipParameters parameters = new ZipParameters();
// 压缩方式
parameters.setCompressionMethod(CompressionMethod.STORE);
// 压缩级别
parameters.setCompressionLevel(CompressionLevel.FAST);
/* 单个文件,平常用不到的
* zipfile.addFile(new File("文件路径"), parameters);
*/
// 多个文件集合
zipfile.addFiles(Arrays.asList(
new File("文件1"),
new File("文件2"),
new File("文件3"))
, parameters);
压缩整个文件夹
// 初始化一个压缩包,生成在储存卡根目录
String sdcard = Environment.getExternalStorageDirectory().getAbsolutePath();
ZipFile zipfile = new ZipFile(sdcard + "/a.zip");
ZipParameters parameters = new ZipParameters();
// 压缩方式
parameters.setCompressionMethod(CompressionMethod.STORE);
// 压缩级别
parameters.setCompressionLevel(CompressionLevel.FAST);
// 添加
zipfile.addFolder(new File("文件夹路径"),parameters);
加密压缩
// 初始化一个压缩包,生成在储存卡根目录
String sdcard = Environment.getExternalStorageDirectory().getAbsolutePath();
ZipFile zipfile = new ZipFile(sdcard + "/a.zip", "密码".toCharArray());
ZipParameters parameters = new ZipParameters();
// 设置加密文件
parameters.setEncryptFiles(true);
// 设置加密方式
parameters.setEncryptionMethod(EncryptionMethod.AES);
// 可选 默认选择AES256
parameters.setAesKeyStrength(AesKeyStrength.KEY_STRENGTH_256);
// 压缩方式
parameters.setCompressionMethod(CompressionMethod.STORE);
// 压缩级别
parameters.setCompressionLevel(CompressionLevel.FAST);
// 添加
zipfile.addFolder(new File("文件夹路径"), parameters);
注释:
•压缩方式
- CompressionMethod.STORE 仅打包
- CompressionMethod.DEFLATE 默认
- CompressionMethod.AES_INTERNAL_ONLY 加密压缩
•压缩等级
- CompressionLevel.FASTEST 最快
- CompressionLevel.FAST 快速
- CompressionLevel.NORMAL 一般
- CompressionLevel.MAXIMUM 体积最大
•加密方式
- EncryptionMethod.NONE 不加密
- EncryptionMethod.ZIP_STANDARD
- EncryptionMethod.ZIP_STANDARD_VARIANT_STRONG
- EncryptionMethod.AES AES加密
解压压缩包(这个就没什么花里胡哨的了)
// 检查压缩包是否被加密
new ZipFile("encrypted_zip_file.zip").isEncrypted();
// 把filename.zip全部解压到指定目录(不带密码)
new ZipFile("filename.zip").extractAll("/destination_directory");
// 带密码
new ZipFile("filename.zip", "password".toCharArray()).extractAll("/destination_directory");
// 解压指定文件
new ZipFile("filename.zip").extractFile("fileNameInZip.txt", "/destination_directory");
new ZipFile("filename.zip", "password".toCharArray()).extractFile("fileNameInZip.txt", "/destination_directory");
// 将文件解压到指定目录并重命名
new ZipFile("filename.zip", "password".toCharArray()).extractFile("fileNameInZip.txt", "/destination_directory", "newfileName.txt");
删除压缩包内指定文件(并不能删除文件夹)
new ZipFile("filename.zip").removeFile("fileNameInZipToRemove");
其他更多的可以翻阅Github项目获得更多方法,这里就不多说了