You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

React Native中使用RNFS读取JSON文件遇到问题求助

我明白你遇到的痛点了——用RNFS成功写入JSON文件后,常规的import或者json-loader根本读不到内容对吧?这是因为RNFS写的文件存放在设备的本地文件系统里,而import是用来读取项目打包时就包含的静态资源,完全不是一个路子~

正确读取RNFS写入的JSON文件的方法

核心原因

RNFS写入的文件是APP运行后生成的动态存储文件,存放在设备的文档目录(DocumentDirectoryPath),而import只能读取打包阶段就嵌入APP包的静态资源,所以肯定读不到。你得用RNFS自带的读取方法来操作。


1. 先统一文件路径(避免拼写错误)

把文件路径定义成常量,确保写入和读取时用同一个路径:

import RNFS from 'react-native-fs';
import moment from 'moment';

// 定义统一的文件路径
const TEST_FILE_PATH = RNFS.DocumentDirectoryPath + '/test.json';

2. 优化你的写入代码(用async/await更清晰)

const writeTestJson = async () => {
  const obj = { date: moment().format(), counter: 0 };
  const jsonStr = JSON.stringify(obj);
  
  try {
    await RNFS.writeFile(TEST_FILE_PATH, jsonStr, 'utf8');
    console.log('文件写入成功!');
  } catch (err) {
    console.error('写入失败:', err.message);
  }
};

3. 用RNFS.readFile读取并解析JSON

读取后记得用JSON.parse把字符串转回对象:

const readTestJson = async () => {
  try {
    // 读取文件内容(utf8格式)
    const fileContent = await RNFS.readFile(TEST_FILE_PATH, 'utf8');
    // 解析成JSON对象
    const data = JSON.parse(fileContent);
    
    console.log('读取到的内容:', data);
    return data; // 可以把数据返回给业务逻辑使用
  } catch (err) {
    console.error('读取失败:', err.message);
    // 如果文件不存在,这里可以做默认值处理
    return { date: '', counter: 0 };
  }
};

额外提醒

  • 调用顺序:确保先执行写入方法,再执行读取方法,不然会触发“文件不存在”的错误。
  • 权限问题:iOS的DocumentDirectory不需要额外权限;Android在API 29及以上不需要申请存储权限,旧版本则需要在AndroidManifest.xml中配置并动态申请。

内容的提问来源于stack exchange,提问作者Daemon021

火山引擎 最新活动