鸿蒙Next中map如何存入文件

在鸿蒙Next中,如何将Map数据存入文件?具体有哪些API或方法可以实现这个功能?希望能提供一个简单的示例代码说明保存和读取的流程。

2 回复

鸿蒙Next里用ohos.file.fs写map到文件?简单!先序列化成JSON字符串,再用fs.write一塞,搞定!记得加try-catch,别让异常把你“拍”在沙滩上~ 😄

更多关于鸿蒙Next中map如何存入文件的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在鸿蒙Next(HarmonyOS NEXT)中,将Map数据存入文件可以通过序列化为JSON字符串后写入文件实现。以下是具体步骤和代码示例:

  1. 添加依赖(在build-profile.json5dependencies中添加):

    "dependencies": {
      "@ohos/data-preferences": ">12.0.0.0"
    }
    
  2. 代码实现

import fs from '@ohos.file.fs';
import util from '@ohos.util';

// 定义Map并存入文件
async function saveMapToFile(mapData: Map<string, any>, filePath: string) {
  try {
    // 1. 将Map转为JSON字符串
    const jsonStr = JSON.stringify(Array.from(mapData.entries()));
    
    // 2. 创建/打开文件
    let file = fs.openSync(filePath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
    
    // 3. 写入数据
    await fs.writeSync(file.fd, jsonStr);
    
    // 4. 关闭文件
    fs.closeSync(file);
    console.log('Map数据已保存至文件');
  } catch (err) {
    console.error('保存失败:', err);
  }
}

// 使用示例
let testMap = new Map();
testMap.set('name', '张三');
testMap.set('age', 25);
testMap.set('skills', ['Java', 'ArkTS']);

// 文件路径(应用沙箱目录)
let filePath = '${沙箱路径}/mapData.txt'; // 需替换为实际路径
saveMapToFile(testMap, filePath);
  1. 读取时还原Map
async function readMapFromFile(filePath: string): Promise<Map<string, any>> {
  try {
    let file = fs.openSync(filePath, fs.OpenMode.READ_ONLY);
    let stat = fs.statSync(filePath);
    let buf = new ArrayBuffer(stat.size);
    fs.readSync(file.fd, buf);
    fs.closeSync(file);
    
    let jsonStr = String.fromCharCode.apply(null, new Uint8Array(buf));
    return new Map(JSON.parse(jsonStr));
  } catch (err) {
    console.error('读取失败:', err);
    return new Map();
  }
}

注意事项

  • 需要申请文件读写权限
  • Map的value需为可序列化类型
  • 实际路径需使用上下文获取的沙箱路径(如getFilesDir()
  • 生产环境需要添加完整的错误处理

这种方式通过JSON序列化保证了数据的结构化存储,读取时能完整恢复Map结构。

回到顶部