Skip to content
目录

手机本地写入和读取数据

相关链接

  • https://developers.weixin.qq.com/miniprogram/dev/framework/ability/file-system.html

  • readFileSync、writeFileSync、readFile和writeFile是Node.js的文件系统模块(fs)提供的不同文件读写方法

  • readFileSync 和 writeFileSync 是同步读写文件的方法,调用时,代码会等待文件写入完成后才继续往下执行

  • readFile 和 writeFile 是异步读写文件的方法,调用时,代码不会等待文件写入完成,而是直接执行后面的代码,文件写入完成后会执行回调函数

【同步】读取和写入

  • offLine.js
js
// 导入文件系统管理器
const system = wx.getFileSystemManager();

/**
 * 同步写入数据到指定的文件中
 * @param {string} fileName - 文件名,不包括扩展名
 * @param {*} data - 要写入的数据,任意类型
 */
function write(fileName, data) {
  try {
    system.writeFileSync(
      `${wx.env.USER_DATA_PATH}/${fileName}.json`,
      JSON.stringify(data),
      "utf8"
    );
    console.log('📵 ~ ', `${fileName}本地缓存写入成功`);
    return true;
  } catch (e) {
    console.log('📵 ~ ', `${fileName}本地缓存写入失败: ` + e);
    return false;
  }
}

/**
 * 同步读取指定文件的内容
 * @param {string} fileName - 文件名,不包括扩展名
 */
function read(fileName) {
  try {
    const json = system.readFileSync(
      `${wx.env.USER_DATA_PATH}/${fileName}.json`,
      "utf8"
    );
    console.log('📵 ~ ', `${fileName}本地缓存读取成功`);
    return JSON.parse(json);
  } catch (e) {
    console.log('📵 ~ ', `${fileName}本地缓存读取失败: ` + e);
    return [];
  }
}

const offLine = {
  write,
  read
};
export default offLine;

【同步】写入和读取调用示例

js
import offLine from "../../utils/offLine.js";

// 同步写入调用示例
const data = [
  { id: 1, name: 'John' },
  { id: 2, name: 'Jane' },
];

const success = offLine.write('exampleFile', data);
if (success) {
  console.log('写入成功');
} else {
  console.log('写入失败');
}

// 同步读取调用示例
const data = offLine.read('exampleFile');
console.log('读取结果:', data);

【异步】读取和写入

  • offLine.js
js
// 导入文件系统管理器
const system = wx.getFileSystemManager();

/**
 * 异步写入数据到指定的文件中,并通过回调函数返回写入结果
 * @param {string} fileName - 文件名,不包括扩展名
 * @param {*} data - 要写入的数据,任意类型
 * @param {function} callback - 回调函数,接受写入结果(true/false)作为参数
 */
function write(fileName, data, callback) {
  system.writeFile({
    filePath: `${wx.env.USER_DATA_PATH}/${fileName}.json`,
    data: JSON.stringify(data),
    encoding: 'utf8',
    success: () => {
      console.log('📵 ~ ', `${fileName} 本地缓存写入成功`);
      callback(true);
    },
    fail: (err) => {
      console.log('📵 ~ ', `${fileName} 本地缓存写入失败 :` + err);
      callback(false);
    }
  });
}

/**
 * 异步读取指定文件的内容,并通过回调函数返回数据
 * @param {string} fileName - 文件名,不包括扩展名
 * @param {function} callback - 回调函数,接受读取到的数据作为参数
 */
function read(fileName, callback) {
  system.readFile({
    filePath: `${wx.env.USER_DATA_PATH}/${fileName}.json`,
    encoding: 'utf8',
    success: (res) => {
      const list = JSON.parse(res.data);
      console.log('📵 ~ ', `${fileName} 本地缓存读取成功`);
      callback(list);
    },
    fail: (err) => {
      console.log('📵 ~ ',`${fileName} 本地缓存读取失败 :` + err);
      callback([]);
    }
  });
}

const offLine = {
  write,
  read
};
export default offLine;

【异步】写入和读取调用示例

js
import offLine from "../../utils/offLine.js";

// 异步写入调用示例
const data = [
  { id: 1, name: 'John' },
  { id: 2, name: 'Jane' },
];

offLine.write('exampleFile', data, (result) => {
    console.log('写入:', result);
});

// 异步读取调用示例
offLine.read('ownerLocalFile', (data) => {
    console.log('读取结果:', data);
});

Released under the MIT License.