鸿蒙next-获取应用文件路径

首先,我们知道鸿蒙next系统上不像android一样提供全部的文件管理器,而是应用沙箱进行了隔离操作,那么如何才能获取到应用的文件路径呢​。

我们要明确应用沙箱是什么​?

应用沙箱是一种以安全防护为目的的隔离机制,避免数据受到恶意路径穿越访问。在这种沙箱的保护机制下,应用可见的目录范围即为“应用沙箱目录”。

  • 对于每个应用,系统会在内部存储空间映射出一个专属的“应用沙箱目录”,它是“应用文件目录”与一部分系统文件(应用运行必需的少量系统文件)所在的目录组成的集合。

  • 应用沙箱限制了应用可见的数据范围。在“应用沙箱目录”中,应用仅能看到自己的应用文件以及少量的系统文件(应用运行必需的少量系统文件)。因此,本应用的文件也不为其他应用可见,从而保护了应用文件的安全。

  • 应用可以在“应用文件目录”下保存和处理自己的应用文件;系统文件及其目录对于应用是只读的;而应用若需访问用户文件,则需要通过特定API同时经过用户的相应授权才能进行。

所以鸿蒙next提供了一种获取方法:

基类Context提供了获取应用文件路径的能力,ApplicationContext、AbilityStageContext、UIAbilityContext和ExtensionContext均继承该能力。应用文件路径属于应用沙箱路径。

通过ApplicationContext获取应用级别的应用文件路径,此路径是应用全局信息推荐的存放路径,这些文件会跟随应用的卸载而删除。

属性路径
bundleCodeDir<路径前缀>/el1/bundle
cacheDir<路径前缀>/<加密等级>/base/cache
filesDir<路径前缀>/<加密等级>/base/files
preferencesDir<路径前缀>/<加密等级>/base/preferences
tempDir<路径前缀>/<加密等级>/base/temp
databaseDir<路径前缀>/<加密等级>/database
distributedFilesDir<路径前缀>/el2/distributedFiles
cloudFileDir12+<路径前缀>/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/bundle
cacheDir<路径前缀>/<加密等级>/base/haps/<module-name>/cache
filesDir<路径前缀>/<加密等级>/base/haps/<module-name>/files
preferencesDir<路径前缀>/<加密等级>/base/haps/<module-name>/preferences
tempDir<路径前缀>/<加密等级>/base/haps/<module-name>/temp
databaseDir<路径前缀>/<加密等级>/database/<module-name>
distributedFilesDir<路径前缀>/el2/distributedFiles/<module-name>
cloudFileDir12+<路径前缀>/el2/cloud/<module-name>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

L.2626

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值