第9篇:调用鸿蒙文件系统:读写本地文件(@ohos.file.fs)

# Flutter × 鸿蒙实战30讲(9):调用鸿蒙文件系统:读写本地文件(@ohos.file.fs)

> 作者:烟云任平生  
> 发布时间:2025年12月9日  
> 标签:`#Flutter` `#OpenHarmony` `#文件系统` `#@ohos.file.fs` `#CSDN`

---

### 一、场景需求

Flutter Web 无法直接访问设备文件系统。  
但业务常需:**保存用户配置、导出日志、读取本地文档**。

解决方案:通过 **ArkTS 桥接 @ohos.file.fs API**。

---

### 二、权限申请

在 `module.json5` 中添加:

```json
{
  "requestPermissions": [
    { "name": "ohos.permission.READ_MEDIA" },
    { "name": "ohos.permission.WRITE_MEDIA" }
  ]
}
💡 OpenHarmony 标准系统中,应用沙箱目录为 /data/storage/el2/base/...
三、ArkTS 实现文件读写
// fileBridge.ts
import fs from '@ohos.file.fs';

export class FileBridge {
  // 写入文件
  static writeFile(filename: string, content: string): boolean {
    try {
      const path = getContext().filesDir + '/' + filename;
      fs.writeTextFileSync(path, content);
      return true;
    } catch (e) {
      console.error('Write failed:', e);
      return false;
    }
  }

  // 读取文件
  static readFile(filename: string): string {
    try {
      const path = getContext().filesDir + '/' + filename;
      return fs.readTextFileSync(path);
    } catch (e) {
      console.error('Read failed:', e);
      return '';
    }
  }
}
📌 getContext().filesDir 返回应用私有目录,无需额外权限。
四、注册到 WebView
在 MainPage.ets 中:
aboutToAppear() {
  this.controller.registerJavaScriptProxy({
    object: {
      saveConfig: (jsonStr: string) => {
        return FileBridge.writeFile('config.json', jsonStr);
      },
      loadConfig: () => {
        return FileBridge.readFile('config.json');
      }
    },
    name: "FileAPI",
    interface: ["saveConfig", "loadConfig"]
  });
}
五、Flutter 侧调用
// 保存配置
void saveConfig(Map<String, dynamic> config) {
  final js = html.window['FileAPI'];
  if (js != null) {
    final jsonStr = jsonEncode(config);
    js.callMethod('saveConfig', [jsonStr]);
  }
}

// 读取配置
Future<Map<String, dynamic>> loadConfig() async {
  final js = html.window['FileAPI'];
  if (js != null) {
    final str = await js.callMethod('loadConfig');
    if (str is String && str.isNotEmpty) {
      return jsonDecode(str);
    }
  }
  return {};
}
六、安全与限制
只能访问 应用私有目录,无法读取其他应用或系统文件
不支持直接操作 SD 卡(需 ohos.permission.MANAGE_EXTERNAL_STORAGE,标准系统慎用)

🔜 下一篇预告:《第10讲:网络请求桥接:从 Flutter 发起 HTTP 请求》

💬 你希望下一步打通哪个系统能力?评论区告诉我!
Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐