在 HarmonyOS 中,应用的沙箱路径是隔离的,并且每个应用都有自己独立的存储空间。对于华为手机上的 HarmonyOS 应用来说,具体的沙箱路径可能会有所不同。不过,可以通过系统提供的 API 来获取应用的绝对路径,而不是硬编码路径。


获取应用文件目录的绝对路径

可以使用 context.getFilesDir() 或者 context.getCacheDir() 等方法来获取应用的文件目录和缓存目录的绝对路径。这些方法会根据应用的实际运行环境返回正确的路径。


示例代码(Java)


import ohos.aafwk.ability.Ability;
import ohos.aafwk.content.Intent;
import ohos.app.Context;
import ohos.data.preferences.Preferences;
import ohos.data.preferences.PreferencesHelper;

public class MainAbility extends Ability {
    @Override
    public void onStart(Intent intent) {
        super.onStart(intent);
        
        // 获取文件目录的绝对路径
        String filesDirPath = getFilesDir().getAbsolutePath();
        System.out.println("Files directory path: " + filesDirPath);

        // 获取缓存目录的绝对路径
        String cacheDirPath = getCacheDir().getAbsolutePath();
        System.out.println("Cache directory path: " + cacheDirPath);
    }
}

示例代码(JS/ArkTS)


import file from '@ohos.file';
import { getContext } from 'ohos.application';

// 获取应用上下文
const context = getContext();

// 获取文件目录的绝对路径
file.getFileInfo(context.filesDir, (err, fileInfo) => {
    if (!err) {
        console.log(`Files directory path: ${fileInfo.uri}`);
    } else {
        console.error('Failed to get files directory path:', err);
    }
});

// 获取缓存目录的绝对路径
file.getFileInfo(context.cacheDir, (err, fileInfo) => {
    if (!err) {
        console.log(`Cache directory path: ${fileInfo.uri}`);
    } else {
        console.error('Failed to get cache directory path:', err);
    }
});

解释

getFilesDir():返回应用内部存储的文件目录。这是一个私有目录,只有该应用可以访问。

getCacheDir():返回应用内部存储的缓存目录。同样,这也是一个私有目录,仅限于该应用访问。

媒体存储路径

如果你需要访问媒体文件存储路径,比如图片、音频、视频等,可以使用以下方法:


示例代码(获取公共媒体存储路径)


import mediaLibrary from '@ohos.multimedia.mediaLibrary';

const mediaLib = mediaLibrary.getMediaLibrary(context);

// 获取媒体库根目录
mediaLib.getRootDirs((err, dirs) => {
    if (!err && dirs.length > 0) {
        console.log('Media library root directories:', dirs);
    } else {
        console.error('Failed to get media library root directories:', err);
    }
});

总结

通过系统提供的 API,可以动态地获取应用的文件目录和缓存目录的绝对路径,而不需要依赖硬编码的路径。这样可以确保你的应用在不同设备和环境下都能正确工作。