如何读取和写入项目根文件夹中的 JSON 文件?

问题描述 投票:0回答:1

我正在尝试使用 expo-file-system 访问与 App.js 文件位于同一文件夹中的 JSON 文件,以对其进行读写,但无论我做什么,我似乎都无法做到这一点.

这是我的项目文件夹的图像(是的,文件名很奇怪,但这现在并不重要)

世博会版本51.0.38

我尝试使用 FileSystem.bundleDirectory 和我的文件名:

import * as FileSystem from "expo-file-system"

...
...
...

const JSONPath = FileSystem.bundleDirectory + "myData.json";

console.log(JSONPath); // outputs  asset:/myData.json
        
FileSystem.readAsStringAsync(JSONPath).then(res => {
    console.log(JSON.stringify(res)); // Doesn't write anything to the console
});

但这会引发异常:

控制台警告:可能未处理的承诺拒绝(id:2):错误:对函数“ExponentFileSystem.readAsStringAsync”的调用已被拒绝。 -> 导致:java.io.FileNotFoundException: myData.json

我也尝试了相同的方法,但是使用 FileSystem.documentDirectory:

import * as FileSystem from "expo-file-system"

...
...
...

const JSONPath = FileSystem.documentDirectory + "myData.json";

console.log(JSONPath); // outputs  file:///data/user/0/host.exp.exponent/files/myData.json

FileSystem.readAsStringAsync(JSONPath).then(res => {
    console.log(JSON.stringify(res));  // Doesn't write anything to the console
});

但这会引发另一个异常:

控制台警告:可能未处理的承诺拒绝(id:3):错误:对函数“ExponentFileSystem.readAsStringAsync”的调用已被拒绝。 -> 导致:java.io.FileNotFoundException:/data/user/0/host.exp.exponent/files/myData.json(没有这样的文件或目录)

我也尝试过使用@expo/json-file,但它抛出一个错误,说它使用fs,这与Expo不兼容。

所以我被困在这里,我已经搜索了一整天,但什么也没找到,所以非常感谢任何帮助。 另外,当我这样做时,documentDirectory和bundleDirectory之间有什么区别??

json react-native expo expo-file-system
1个回答
0
投票

更新:我最终使用

expo-sqlite
而不是JSON文件,它在我的情况下效果更好,因为它充当本地数据库并且可以查询。

这里是官方文档 -> https://docs.expo.dev/versions/latest/sdk/sqlite/

© www.soinside.com 2019 - 2024. All rights reserved.