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
相关产品推荐
相关产品推荐

