summerain0的技术专栏 Android and Java Coder

zip4j的简单运用

2019-10-04

阅读:


zip4j的简单运用


有的时候项目需要压缩一些文件进行上传,或者从云端下载后进行解压,便需要ZipOutputStream,过程主要是新建一 个压缩文件,然后拷贝所有的文件,拷贝过程中添加新的文件进去,速度比较慢。 既然麻烦,那就可以用别人给的轮子,于是就发现了zip4j

引入

<dependency>
    <groupId>net.lingala.zip4j</groupId>
    <artifactId>zip4j</artifactId>
    <version>2.2.1</version>
</dependency>

或者

	implementation "net.lingala.zip4j:zip4j:2.2.1"

压缩文件

  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项目获得更多方法,这里就不多说了


Similar Posts

上一篇 hello jekyll!

Comments