
回复
本文旨在深入探讨华为鸿蒙HarmonyOS Next系统(截止目前API12)的文件管理技术细节,基于实际开发实践进行总结。
主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。
本文为原创内容,任何形式的转载必须注明出处及原作者。
引言
用户文件访问是移动应用开发中的一项重要功能,HarmonyOS Next 的 File Access Framework 为开发者提供了便捷、安全的方式来实现用户文件访问和管理。本文将深入探讨 File Access Framework 的架构、功能、权限控制以及使用方法,并通过示例代码展示如何实现文件选择、保存和文件管理操作。
1. File Access Framework 简介
File Access Framework 是 HarmonyOS Next 提供的一套用户文件访问和管理框架,它基于 ExtensionAbility 组件机制,为开发者提供统一的接口和方法,方便开发者访问和管理用户文件。File Access Framework 具有以下特点:
module.json5
中声明所需的文件选择和保存权限,例如:"abilities": [
{
"name": "EntryAbility",
"skills": [
{
"actions": [
"ohos.arkui.intent.action.CHOOSE"
],
"uris": [
{
"scheme": "file",
"host": "*",
"path": "/storage/*"
}
]
},
{
"actions": [
"ohos.arkui.intent.action.SAVE"
],
"uris": [
{
"scheme": "file",
"host": "*",
"path": "/storage/*"
}
]
}
]
}
]
3. 用户文件访问接口说明
File Access Framework 提供了以下接口供开发者使用:
import { fileAccess } from '@ohos.fileAccess';
import { Want } from '@ohos.arkui.ability';
export default class EntryAbility extends Ability {
onWindowStageCreate(windowStage: WindowStage) {
const.wantAgent = wantAgent.createWantAgent();
const chooseIntent = {
action: 'ohos.arkui.intent.action.CHOOSE',
entities: ['image/*'],
type: 'image/*'
};
const chooseWant = wantAgent.createWant(chooseIntent);
this.context.startAbility(chooseWant, (result) => {
if (result) {
const uri = chooseWant.response.result;
// 获取图片属性
fileAccess.getFileInfo(uri, (error, fileInfo) => {
if (error) {
console.error('Failed to get file info:', error);
} else {
console.log('File info:', fileInfo);
}
});
} else {
console.log('Failed to choose image');
}
});
}
}
保存文档
import { fileAccess } from '@ohos.fileAccess';
import { Want } from '@ohos.arkui.ability';
export default class EntryAbility extends Ability {
onWindowStageCreate(windowStage: WindowStage) {
const.wantAgent = wantAgent.createWantAgent();
const saveIntent = {
action: 'ohos.arkui.intent.action.SAVE',
type: 'text/plain'
};
const saveWant = wantAgent.createWant(saveIntent);
this.context.startAbility(saveWant, (result) => {
if (result) {
const uri = saveWant.response.result;
// 保存文档内容
fileAccess.saveFile(uri, 'Hello, World!', (error) => {
if (error) {
console.error('Failed to save file:', error);
} else {
console.log('File saved successfully');
}
});
} else {
console.log('Failed to save document');
}
});
}
}
文件管理
import { fileAccess } from '@ohos.fileAccess';
export default class EntryAbility extends Ability {
onWindowStageCreate(windowStage: WindowStage) {
const filesDir = this.context.filesDir;
// 创建目录
fileAccess.createDir(filesDir + '/newDir', (error) => {
if (error) {
console.error('Failed to create directory:', error);
} else {
console.log('Directory created successfully');
}
});
// 删除文件
fileAccess.deleteFile(filesDir + '/test.txt', (error) => {
if (error) {
console.error('Failed to delete file:', error);
} else {
console.log('File deleted successfully');
}
});
}
}
5. File Access Framework 优势
File Access Framework 的优势主要体现在以下几个方面: