【FFH】自制一款ArkUI组件-应用文件管理器(一) 原创 精华
前言
在涉及应用内部存储的开发时,常常翻阅手机自带的文件管理检查。正好在学习文件管理的接口,想着实现一个第三方组件用于当前应用的文件查看和管理。
介绍
- 类型:第三方组件.ets
- 语言框架:ArkTs
- API版本:HarmonyOS SDK 8
- 模型:FA
目前已实现的功能:
-
上下级文件的浏览
-
查看文件基本信息(名称、大小、修改日期)
-
删除文件
-
文件路径显示
-
组件宽高、横竖屏自适应
使用示例
接下来是实现思路的简单分析,有兴趣的可以看一下源代码。
实现思路
主要涉及两个方面:
- 接口函数
- 交互设计(后续出)
1.接口函数
1.1 接口方法整理
接口函数涉及到文件目录的访问、文件信息的读取、文件的删除等,文档接口非常多,但只需认识基本的几个接口就够用了。
文档传送门:@ohos.fileio (文件管理)-文件管理-接口参考(ArkTS及JS API)-手机、平板、智慧屏和智能穿戴开发-ArkTS API参考-HarmonyOS应用开发
这里给大家整理了基本的接口:
相关对象 | 描述 |
---|---|
fileio.Dir | 目录实例 |
fileio.Direct | 目录项实例 |
fileio.stat | 文件具体信息 |
相关接口方法 | 作用 |
---|---|
fileio.openDir(path: string) | 打开目录(文件夹) |
fileio.stat(path: string) | 获取文件信息(大小、修改日期等) |
fileio.unlink(path: string) | 删除文件 |
fileio.rmDir(path: string) | 删除目录 |
fileio.Dir.read() | 读取下一个目录项 |
fileio.Dir.close() | 关闭目录 |
fileio.Direct.name | 目录项名称属性 |
fileio.Direct.isDirectory() | 是否为目录(文件夹) |
fileio.Direct.isFile() | 是否为普通文件 |
下面是底层开放访问的三大目录:
相关接口方法 | 作用 | 访问 |
---|---|---|
Context.getOrCreateLocalDir() | 获取应用程序的本地根目录 | preferences目录所在 |
Context.getCacheDir() | 获取该应用程序的内部存储目录 | cache 临时目录 internal://cache |
Context.getFilesDir() | 获取内部存储器上此应用程序的文件目录 | files 文件(私有)目录 internal://app |
以上接口返回的路径都是以 /data/user/0/包名/ 开头,是多种访问路径的其中一种。
PS:
Stage模型中提供的目录访问接口与FA不同,有三个目录:tempDir、cacheDir、filesDir,还有其它类型的目录如数据库目录等,具体参考gitee文档 Context模块。
API 9 还提供了新的文件管理接口,但是接口方法大同小异:
1.2 代码思路
以数据结构中最基本的树状结构数组来保存文件的父子关系和个体信息,每一次的文件操作相当于维护这样的一个文件树
每一个文件对应一个node结点:
主要变量:
维护文件树方法:
工具方法:
下面是部分与fileio密切相关的函数:
- 打开选中目录
- 添加新文件结点
- 删除目录(包含删除文件操作)
PS: 当目录存在子文件时,不允许直接调用 rmdir() 删除该目录,需要先删除所有子文件、子目录,否则会报错code:39,这里我采用深度搜索遍历的方法删除所有子文件、子目录。
错误码参考链接 (这是 3.1 beta 的文档,终于可以清晰地知道错误码的信息了。)
效果图
上下浏览
删除操作
可以看出是很实用的文件管理系统
好好好
大佬,这个是当前应用下的文件管理系统。那如果我想做一个基于当前设备根目录下的文件管理系统(就和鸿蒙系统自带的一样,但是如果我想自己实现)呢?翻遍官方文档也没发现有提供这样的api,真心求教,谢谢