IT评测·应用市场-qidao123.com
标题:
鸿蒙next-获取应用文件路径
[打印本页]
作者:
河曲智叟
时间:
2025-2-13 17:14
标题:
鸿蒙next-获取应用文件路径
首先,我们知道鸿蒙next系统上不像android一样提供全部的文件管理器,而是应用沙箱进行了隔离操纵,那么如何才能获取到应用的文件路径呢。
我们要明确应用沙箱是什么?
应用沙箱是一种以安全防护为目的的隔离机制,避免数据受到恶意路径穿越访问。在这种沙箱的保护机制下,应用可见的目录范围即为“应用沙箱目录”。
对于每个应用,系统会在内部存储空间映射出一个专属的“应用沙箱目录”,它是“应用文件目录”与一部分系统文件(应用运行必须的少量系统文件)所在的目录组成的集合。
应用沙箱限制了应用可见的数据范围。在“应用沙箱目录”中,应用仅能看到自己的应用文件以及少量的系统文件(应用运行必须的少量系统文件)。因此,本应用的文件也不为其他应用可见,从而保护了应用文件的安全。
应用可以在“应用文件目录”下生存和处理惩罚自己的应用文件;系统文件及其目录对于应用是只读的;而应用若需访问用户文件,则必要通过特定API同时颠末用户的相应授权才能进行。
所以鸿蒙next提供了一种获取方法:
基类Context提供了获取应用文件路径的能力,ApplicationContext、AbilityStageContext、UIAbilityContext和ExtensionContext均继承该能力。应用文件路径属于应用沙箱路径。
通过ApplicationContext获取应用级别的应用文件路径,此路径是应用全局信息保举的存放路径,这些文件会跟随应用的卸载而删除。
属性路径bundleCodeDir<路径前缀>/el1/bundlecacheDir<路径前缀>/<加密等级>/base/cachefilesDir<路径前缀>/<加密等级>/base/filespreferencesDir<路径前缀>/<加密等级>/base/preferencestempDir<路径前缀>/<加密等级>/base/tempdatabaseDir<路径前缀>/<加密等级>/databasedistributedFilesDir<路径前缀>/el2/distributedFilescloudFileDir12+<路径前缀>/el2/cloud
import { common } from '@kit.AbilityKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { promptAction } from '@kit.ArkUI';
const TAG: string = '[Page_Context]';
const DOMAIN_NUMBER: number = 0xFF00;
@Entry
@Component
struct Page_Context {
private context = getContext(this) as common.UIAbilityContext;
build() {
Column() {
//...
List({ initialIndex: 0 }) {
ListItem() {
Row() {
//...
}
.onClick(() => {
let applicationContext = this.context.getApplicationContext();
let cacheDir = applicationContext.cacheDir;
let tempDir = applicationContext.tempDir;
let filesDir = applicationContext.filesDir;
let databaseDir = applicationContext.databaseDir;
let bundleCodeDir = applicationContext.bundleCodeDir;
let distributedFilesDir = applicationContext.distributedFilesDir;
let preferencesDir = applicationContext.preferencesDir;
let cloudFileDir = applicationContext.cloudFileDir;
// 获取应用文件路径
let filePath = tempDir + 'test.txt';
hilog.info(DOMAIN_NUMBER, TAG, `filePath: ${filePath}`);
if (filePath !== null) {
promptAction.showToast({
message: filePath
});
}
})
}
//...
}
//...
}
//...
}
}
复制代码
通过AbilityStageContext、UIAbilityContext、ExtensionContext获取HAP级别的应用文件路径。此路径是HAP相干信息保举的存放路径,这些文件会跟随HAP的卸载而删除,但不会影响应用级别路径的文件,除非该应用的HAP已全部卸载。
import { common } from '@kit.AbilityKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { promptAction } from '@kit.ArkUI';
const TAG: string = '[Page_Context]';
const DOMAIN_NUMBER: number = 0xFF00;
@Entry
@Component
struct Page_Context {
private context = getContext(this) as common.UIAbilityContext;
build() {
Column() {
//...
List({ initialIndex: 0 }) {
ListItem() {
Row() {
//...
}
.onClick(() => {
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;
let cloudFileDir = applicationContext.cloudFileDir;
// 获取应用文件路径
let filePath = tempDir + 'test.txt';
hilog.info(DOMAIN_NUMBER, TAG, `filePath: ${filePath}`);
if (filePath !== null) {
promptAction.showToast({
message: filePath
});
}
})
}
//...
}
//...
}
//...
}
}
复制代码
属性路径bundleCodeDir<路径前缀>/el1/bundlecacheDir<路径前缀>/<加密等级>/base/
haps/<module-name>
/cachefilesDir<路径前缀>/<加密等级>/base/
haps/<module-name>
/filespreferencesDir<路径前缀>/<加密等级>/base/
haps/<module-name>
/preferencestempDir<路径前缀>/<加密等级>/base/
haps/<module-name>
/tempdatabaseDir<路径前缀>/<加密等级>/database/
<module-name>
distributedFilesDir<路径前缀>/el2/distributedFiles/
<module-name>
cloudFileDir12+<路径前缀>/el2/cloud/
<module-name>
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/)
Powered by Discuz! X3.4