You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Expo Go中React Native读取资源文件时readAsStringAsync返回异常对象

在Expo Go中正确读取Assets目录下的TXT/CSV文件

你看到的{"_A": null, "_x": 0, "_y": 0, "_z": null}是未被处理的Promise对象——FileSystem.readAsStringAsync是异步函数,必须通过await等待它完成才能拿到实际文件内容。以下是修正方案和其他可行的实现方式:

修正你的原有代码

核心是给异步读取操作添加await:

import { Asset } from "expo-asset";
import * as FileSystem from "expo-file-system";

const getFiles = async () => {
  const [{ localUri }] = await Asset.loadAsync(
    require("./assets/gpx/test.txt")
  );
  console.log("localUri", localUri);
  // 添加await等待异步读取完成
  const fileContent = await FileSystem.readAsStringAsync(localUri);
  console.log("文件内容", fileContent);
};

更简洁的实现方式

方式1:直接导入文本文件(适合小型TXT/CSV)

对于体积较小的文本类文件,可以直接通过require导入内容,无需额外异步操作:

const fileContent = require("./assets/gpx/test.txt");
console.log("文件内容", fileContent);

方式2:使用asset://协议直接读取

无需提前加载Asset,直接通过Asset.fromModule生成资源路径后读取:

import { Asset } from "expo-asset";
import * as FileSystem from "expo-file-system";

const getFiles = async () => {
  const assetUri = Asset.fromModule(require("./assets/gpx/test.txt")).uri;
  const fileContent = await FileSystem.readAsStringAsync(assetUri);
  console.log("文件内容", fileContent);
};

注意事项

  • 确保assets目录结构和文件路径完全正确,避免因路径错误导致读取失败
  • 大文件建议使用Asset.loadAsync配合FileSystem的方式,避免直接导入增大应用bundle体积
  • Expo Go环境下无需额外配置文件读取权限,打包成独立应用时也无需申请额外权限(assets属于应用包内资源)

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 01:35:25