鸿蒙 NEXT 开发:上下文和路径问题汇总
应用文件路径
ts
import UIAbility from "@ohos.app.ability.UIAbility";
export default class EntryAbility extends UIAbility {
onCreate(want, launchParam) {
let cacheDir = this.context.cacheDir;
let tempDir = this.context.tempDir;
let filesDir = this.context.filesDir;
let databaseDir = this.context.databaseDir;
let bundleCodeDir = this.context.bundleCodeDir;
let distributedFilesDir = this.context.distributedFilesDir;
let preferencesDir = this.context.preferencesDir;
// ...
}
}
应用沙箱路径和真实物理路径的对应关系
在应用沙箱路径下读写文件,经过映射转换,实际读写的是真实物理路径中的应用文件,应用沙箱路径与真实物理路径对应关系如下表所示。
其中 <USERID>
当前固定为 100。
应用沙箱路径 | 物理路径 | 说明 |
---|---|---|
/data/storage/el1/bundle | /data/app/el1/bundle/public/<PACKAGENAME> | 应用安装包目录 |
/data/storage/el1/base | /data/app/el1/<USERID> /base/<PACKAGENAME> | 应用 el1 级别加密数据目录 |
/data/storage/el2/base | /data/app/el2/<USERID> /base/<PACKAGENAME> | 应用 el2 级别加密数据目录 |
/data/storage/el1/database | /data/app/el1/<USERID> /database/<PACKAGENAME> | 应用 el1 级别加密数据库目录 |
/data/storage/el2/database | /data/app/el2/<USERID> /database/<PACKAGENAME> | 应用 el2 级别加密数据库目录 |
/data/storage/el2/distributedfiles | /mnt/hmdfs/<USERID> /account/merge_view/data/<PACKAGENAME> | 应用 el2 加密级别有帐号分布式数据融合目录 |
一级目录
data/
:代表应用文件目录。二级目录
storage/
:代表本应用持久化文件目录。三级目录
el1/
、el2/
:代表不同文件加密类型。el1
,设备级加密区:设备开机后即可访问的数据区。el2
,用户级加密区:设备开机后,需要至少一次解锁对应用户的锁屏界面(密码、指纹、人脸等方式或无密码状态)后,才能够访问的加密数据区。- 应用如无特殊需要,应将数据存放在 el2 加密目录下,以尽可能保证数据安全。但是对于某些场景,一些应用文件需要在用户解锁前就可被访问,例如时钟、闹铃、壁纸等,此时应用需要将这些文件存放到设备级加密区(
el1
)。切换应用文件加密类型目录的方法请参见获取和修改加密分区。
bundle
安装文件路径应用安装后的 App 的 HAP 资源包所在目录;随应用卸载而清理。不能拼接路径访问资源文件,请使用资源管理接口访问资源。可以用于存储应用的代码资源数据,主要包括应用安装的 HAP 资源包、可重复使用的库文件以及插件资源等。此路径下存储的代码资源数据可以被用于动态加载。
base
本设备文件路径应用在本设备上存放持久化数据的目录,子目录包含 files/、cache/、temp/和 haps/;随应用卸载而清理。
database
数据库路径应用在 el2 加密条件下存放通过分布式数据库服务操作的文件目录;随应用卸载而清理。仅用于保存应用的私有数据库数据,主要包括数据库文件等。此路径下仅适用于存储分布式数据库相关文件数据。
distributedfiles
分布式文件路径应用在
el2
加密条件下存放分布式文件的目录,应用将文件放入该目录可分布式跨设备直接访问;随应用卸载而清理。可以用于保存应用分布式场景下的数据,主要包括应用多设备共享文件、应用多设备备份文件、应用多设备群组协助文件。此路径下存储这些数据,使得应用更加适合多设备使用场景。files
应用通用文件路径应用在本设备内部存储上通用的存放默认长期保存的文件路径;随应用卸载而清理。可以用于保存应用的任何私有数据,主要包括用户持久性文件、图片、媒体文件以及日志文件等。此路径下存储这些数据,使得数据保持私有、安全且持久有效。
cache
应用缓存文件路径应用在本设备内部存储上用于缓存下载的文件或可重新生成的缓存文件的路径,应用
cache
目录大小超过配额或者系统空间达到一定条件,自动触发清理该目录下文件;用户通过系统空间管理类应用也可能触发清理该目录。应用需判断文件是否仍存在,决策是否需重新缓存该文件。可以用于保存应用的缓存数据,主要包括离线数据、图片缓存、数据库备份以及临时文件等。此路径下存储的数据可能会被系统自动清理,因此不要存储重要数据。preferences
应用首选项文件路径应用在本设备内部存储上通过数据库 API 存储配置类或首选项的目录;应用在本设备内部存储上通过数据库 API 存储配置类或首选项的目录;随应用卸载而清理。详见通过用户首选项实现数据持久化。可以用于保存应用的首选项数据,主要包括应用首选项文件以及配置文件等。此路径下仅适用于存储小量数据。
temp
应用临时文件路径应用在本设备内部存储上仅在应用运行期间产生和需要的文件,应用退出后即清理。可以用于保存应用的临时生成的数据,主要包括数据库缓存、图片缓存、临时日志文件、以及下载的应用安装包文件等。此路径下存储使用后即可删除的数据。
Image 无法加载中文路径的图片
需要调用 encodeURI(url)
再给 Image
。
如何在组件中获取 UIAbilityContext
ets
import common from '@ohos.app.ability.common';
@Entry
@Component
struct Index {
onPageShow() {
const context = getContext(this) as common.UIAbilityContext;
}
build() {
// ...
}
}