三方库设计说明
1 需求场景分析
基于仓颉语言实现的文件压缩和解压缩。
2 三方库对外提供的特性
(1) zip 压缩和解压缩。
(2) gzip 的压缩和解压缩。
(3) tar 的创建和提取。
(4) tar.gz 的压缩和解压缩。
3 License分析
Apache License 2.0
| Permissions | Limitations |
|---|---|
| Commercial use | Trademark use |
| Modification | Liability |
| Distribution | Warranty |
| Patent use | |
| Private use |
4 依赖分析
仓颉三方库 charset
5 特性设计文档
5.1 核心特性1
5.1.1 特性介绍
支持 tar 创建和提取。
5.1.2 实现方案
参考:https://github.com/srikanth-lingala/zip4j
5.1.3 接口设计
💡 TarFile tar 创建和解压。
| 成员函数 | 入参 | 返回值 | 作用描述 |
|---|---|---|---|
| extractTar | file: Array<UInt8> | / | 实现 tar 解压 |
| storeTar | targetFile: String | / | 将目标文件夹里的文件打包成 tar 文件 |
5.1.4 展示示例
var tf = TarFile()
tf.outPath = "/mnt/c/Users/lizhenjie/Desktop/"
var file = FileUtils.readFile("/mnt/c/Users/lizhenjie/Desktop/water_analysis.tar")
tf.extractTar(file)
5.2 核心特性1
5.2.1 特性介绍
支持 GZIP 压缩和解压。
5.2.2 实现方案
参考:https://github.com/srikanth-lingala/zip4j
5.2.3 接口设计
💡 GZUtils GZIP 压缩和解压。
| 成员变量 | 类型 | 返回值 | 作用描述 |
|---|---|---|---|
| compress | filePath: String outPath: String |
Int64 | 实现 GZIP 压缩 |
| decompress | filePath: String outPath: String |
Int64 | 实现 GZIP 解压 |
5.2.4 展示示例
GZIP 压缩
GZUtils.compress("/mnt/c/Users/lizhenjie/Desktop/test.txt", "test.gz")
GZIP 解缩
GZUtils.deCompress("/mnt/c/Users/lizhenjie/Desktop/test.gz,text.txt")
5.3 核心特性1
5.3.1 特性介绍
支持 ZIP 压缩文件功能。
5.3.2 实现方案
参考:https://github.com/srikanth-lingala/zip4j
5.3.3 接口设计
💡 ZipFile 提供 ZIP 压缩文件功能
| 成员函数 | 入参 | 返回值 | 作用描述 |
|---|---|---|---|
| init | / | / | Zip 压缩初始化 |
| init | filePath: String | / | Zip 压缩初始化 |
| addFile | file: String | / | Zip 添加压缩的文件 |
| addFiles | files: HashSet<String> | / | Zip 添加压缩的文件集合 |
| writeZip | / | / | Zip 压缩 |
| extractAll | ArrayList<LocalFileHeader> | / | Zip 提取所有解压后的数据 |
| nameList | / | Array<Stringr> | 获取压缩包中的目录 |
| setOutPath | outPath: String | / | Zip 设置文件压缩后的路径 |
5.3.4 展示示例
ZIP 压缩
var zipFile= ZipFile()
zipFile.setOutPath("/mnt/c/Users/lizhenjie/Desktop/test.zip")
zipFile.addFile("/mnt/c/Users/lizhenjie/Desktop/test.txt")
zipFile.addFile("/mnt/c/Users/lizhenjie/Desktop/aaa.docx")
zipFile.writeZip()
ZIP 压缩
var zipFile= ZipFile("/mnt/c/Users/lizhenjie/Desktop/MisLinks.zip")
zipFile.setOutPath("/mnt/c/Users/lizhenjie/Desktop/MisLinks")
zipFile.extractAll()
5.4 核心特性1
5.4.1 特性介绍
提供了一些文件操作方法。
5.4.2 实现方案
参考:https://github.com/srikanth-lingala/zip4j
5.4.3 接口设计
💡 FileUtils 该类提供了一些文件操作方法。
| 成员函数 | 入参 | 返回值 | 作用描述 |
|---|---|---|---|
| getFilePath | outPath: String fileName: String |
String | 获取文件名 |
| getFileName | path: String | String | 获取文件名 |
| readFile | path: String | Array<UInt8> | 根据文件路径读取文件 |
| writeFile | outData: Array<UInt8>, filePath: String | / | 根据文件内容和路径写入文件 |
5.4.4 展示示例
FileUtils.getFileName("/mnt/c/Users/lizhenjie/Desktop/MisLinks.zip")