143 Star 1.3K Fork 1.5K

OpenHarmony/applications_app_samples

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

压缩与解压

介绍

本示例通过@ohos.zlib@ohos.fileio 接口,实现添加文件、解压和压缩文件场景。

效果预览

主页面 zlib解压缩文件页面 zlib相关接口调用页面 压缩多个文件页面

使用说明

zlib解压缩文件

1.点击屏幕右上角 + 按钮,弹出创建文件窗口。

2.输入文件名称、文件内容,并点击 确定 按钮来创建文件。

3.文件创建成功后,文件名称自动追加.txt后缀并在主页面列表会显示,同时文件的物理地址为/data/app/el2/100/base/ohos.samples.ziplib/haps/entry/files/,点击 压缩 按钮,提示“文件压缩成功”,并会在文件列表创建一个相同名称的.zip文件。

4.点击压缩文件后的 解压 按钮,提示“文件解压成功”,并会再次在文件列表创建一个同名文件夹。

压缩多个文件使用说明:

1.主界面点击zLib相关接口调用按钮,进入 zLib相关接口调用界面。

2.点击屏幕上方压缩多个文件,跳转到压缩多个文件界面。

3.点击屏幕右上角的 **+**按钮,弹出创建文件窗口。

4.输入文件名称、文件内容,并点击 确定 按钮来创建文件,重复操作,创建多个文件。

5.文件创建成功后,文件名称自动追加.txt后缀并在主页面列表会显示,同时文件的物理地址为/data/app/el2/100/base/ohos.samples.ziplib/haps/entry/files/,

点击 压缩 按钮,提示“压缩多个文件成功”,并会在文件列表创建一个名称为test.zip的文件。

gzip格式解压缩使用说明:

1.主界面点击zLib相关接口调用按钮,进入zLib相关接口调用界面。

2.zLib相关接口调用界面中点击gzip格式解压缩按钮,提示“gzip文件压缩成功,压缩数据为:hello,hello!",数据压入gzipTest.gz文件中,同时文件的物理地址为/data/app/el2/100/base/ohos.samples.ziplib/haps/entry/cache/。

3.等待约3s后,提示“gzip文件解压成功,解压数据为:hello,hello!",并将解压后的结果写入gzipTest.txt文件中,同时文件的物理地址为/data/app/el2/100/base/ohos.samples.ziplib/haps/entry/cache/。

zlib格式解压缩使用说明:

1.主界面点击zLib相关接口调用按钮,进入zLib相关接口调用界面。

2.zLib相关接口调用界面中点击zlib格式解压缩按钮,提示“zlib文件压缩成功,压缩数据为: hello,hello!",并将压缩后的结果写入zlibDeflateFile.txt文件中,同时文件的物理地址为/data/app/el2/100/base/ohos.samples.ziplib/haps/entry/cache/。

3.等待约3s后,提示“zlib文件解压成功,解压数据为: hello,hello!",并将解压后的结果写入zlibInflateFile.txt文件中,同时文件的物理地址为/data/app/el2/100/base/ohos.samples.ziplib/haps/entry/cache/。

工程目录

entry/src/main/ets/
|---common
|   |---AddDialog.ets                       // 弹窗组件
|---entryability
|---model
|   |---DataSource.ets                      // 懒加载文件
|   |---Logger.ts                           // 日志文件
|---zlib
|   |---CompressFilesPage.ets               // 压缩多个文件
|   |---ZipLibDecompressionPage.ets         // ZipLib解压缩界面
|   |---ZlibInterfaceListPage.ets           // 接口分类界面,包含zlib解压缩、gzip解压缩、crc校验功能
|---pages
|   |---Index.ets                           // 首页

具体实现

  • zlib解压缩文件功能,包含添加文件,解压和压缩文件的接口,源码参考ZipLibDecompressionPage.ets

    • 添加文件:通过调用fileio.openSync()创建文件并调用fileio.writeSync()向文件中写入内容。
    • 压缩文件:通过调用zlib.zipFile()压缩文件。
    • 解压文件:通过zlib.unzipFile解压文件。
  • 压缩多个文件功能,包含添加文件和压缩文件的接口,源码参考CompressFilesPage.ets

    • 添加文件:通过调用fileio.openSync()创建文件并调用fileio.writeSync()向文件中写入内容。
    • 压缩多个文件:通过调用zlib.compressFiles()压缩指定的多个文件。
    • 计算压缩文件大小:通过调用getOriginalSize()计算.zip文件大小。
  • zlib压缩和解压数据相关的接口,源码参考ZlibInterfaceListPage.ets

    • 创建zip对象:通过调用zlib.createZipSync()创建zip对象。

    • 压缩数据初始化:通过调用zip.deflateInit()进行压缩数据的初始化。

    • 校验数据:通过调用crc32()校验数据。

    • 压缩数据:通过调用zip.deflate()压缩数据。

    • 释放动态分配的数据结构:通过调用zip.deflateEnd()释放动态分配的数据结构。

    • 创建zip对象:通过调用zlib.createZipSync()创建zip对象。

    • 解压数据初始化:通过调用zip.inflateInit()进行解压数据的初始化。

    • 校验数据:通过调用crc32()校验数据。

    • 解压数据:通过调用zip.inflate()解压数据。

    • 释放动态分配的数据结构:通过调用zip.inflateEnd()释放动态分配的数据结构。

  • gzip将数据压缩和解压相关的接口,源码参考ZLibInterfaceListPage.ets

    • 创建gzip对象:通过调用zlib.createGZipSync()创建gzip对象。

    • 打开文件:通过调用gzip.gzopen()打开文件并进行读写操作。

    • 将数据压缩并写入文件:通过调用gzip.gzfwrite()将数据压缩并写入文件。

    • 刷新文件:通过调用gzip.gzflush刷新文件。

    • 关闭文件:通过调用gzip.gzclose关闭文件。

    • 创建gzip对象:通过调用zlib.createGZipSync()创建gzip对象。

    • 打开文件:通过调用gzip.gzopen()打开文件并进行读写操作。

    • 从文件中读取和解压数据:通过调用gzip.gzfread()从文件中读取和解压数据。

    • 关闭文件:通过调用gzip.gzclose关闭文件。

相关权限

不涉及。

依赖

不涉及。

约束与限制

1.本示例仅支持标准系统上运行,支持设备:RK3568。

2.本示例需要使用DevEco Studio 4.1 Beta2 (Build Version: 4.1.0.400, built on April 9, 2024)才可编译运行。

3.解压与压缩相关接口的入参路径必须为context相关接口获取的相对路径,目前该接口仅支持操作应用目录下的文件。

4.本示例已适配API version 12版本SDK,版本号 5.0.0.28。

下载

如需单独下载本工程,执行如下命令:

git init
git config core.sparsecheckout true
echo code/LaunguageBaseClassLibrary/ZipLib/ > .git/info/sparse-checkout
git remote add origin https://gitee.com/openharmony/applications_app_samples.git
git pull origin master
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/openharmony/applications_app_samples.git
git@gitee.com:openharmony/applications_app_samples.git
openharmony
applications_app_samples
applications_app_samples
master

搜索帮助