鸿蒙Next如何读写外部存储
在鸿蒙Next系统中,如何实现对外部存储(如SD卡或U盘)的读写操作?需要哪些权限或API?是否有具体的代码示例或最佳实践?
2 回复
鸿蒙Next读写外部存储?简单说就是:先申请权限,再操作文件。用@ohos.file.fs模块,比如fs.copyFile()复制文件,fs.readText()读文本。记得在module.json5里声明存储权限,不然系统会傲娇地拒绝你。注意:别乱删用户照片,否则手机会哭的。
更多关于鸿蒙Next如何读写外部存储的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在鸿蒙Next(HarmonyOS NEXT)中,读写外部存储(如SD卡或共享存储空间)需要通过权限申请和文件管理API实现。以下是具体步骤和示例代码:
1. 权限申请
在module.json5配置文件中声明存储权限:
{
"module": {
"requestPermissions": [
{
"name": "ohos.permission.READ_MEDIA",
"reason": "需要读取外部存储文件"
},
{
"name": "ohos.permission.WRITE_MEDIA",
"reason": "需要写入外部存储文件"
}
]
}
}
2. 动态权限申请
在代码中动态请求用户授权:
import abilityAccessCtrl from '@ohos.abilityAccessCtrl';
import common from '@ohos.app.ability.common';
// 获取上下文
let context: common.Context = getContext(this) as common.Context;
// 检查并申请权限
async function requestPermissions() {
let atManager = abilityAccessCtrl.createAtManager();
let permissions = ['ohos.permission.READ_MEDIA', 'ohos.permission.WRITE_MEDIA'];
try {
let result = await atManager.requestPermissionsFromUser(context, permissions);
if (result.authResult === 0) {
console.log("权限授权成功");
} else {
console.log("权限授权失败");
}
} catch (err) {
console.error(`权限申请异常: ${err.code}, ${err.message}`);
}
}
3. 读写文件操作
使用@ohos.file.fs和@ohos.file.environment进行文件管理:
示例:写入文件到外部存储
import fs from '@ohos.file.fs';
import environment from '@ohos.file.environment';
// 获取外部存储目录路径
let dirPath: string = environment.getExternalStorageDir() + "/Documents";
// 创建文件路径
let filePath: string = dirPath + "/test.txt";
try {
// 写入文件
let file = fs.openSync(filePath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
fs.writeSync(file.fd, "Hello, HarmonyOS!"); // 写入内容
fs.closeSync(file); // 关闭文件
console.log("文件写入成功");
} catch (err) {
console.error(`写入失败: ${err.code}, ${err.message}`);
}
示例:从外部存储读取文件
try {
let file = fs.openSync(filePath, fs.OpenMode.READ_ONLY);
let buf = new ArrayBuffer(1024);
let readLen = fs.readSync(file.fd, buf); // 读取内容到缓冲区
let content = String.fromCharCode.apply(null, new Uint8Array(buf.slice(0, readLen)));
fs.closeSync(file);
console.log("文件内容: " + content);
} catch (err) {
console.error(`读取失败: ${err.code}, ${err.message}`);
}
注意事项:
- 权限依赖:确保用户已授权,否则会抛出安全错误。
- 路径处理:使用
getExternalStorageDir()获取标准外部存储路径,避免硬编码。 - 错误处理:所有文件操作需用
try-catch包裹,防止崩溃。
以上代码基于HarmonyOS NEXT API 10+,实际开发时请根据SDK版本调整。

