我正在尝试使用 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之间有什么区别??
更新:我最终使用
expo-sqlite
而不是JSON文件,它在我的情况下效果更好,因为它充当本地数据库并且可以查询。
这里是官方文档 -> https://docs.expo.dev/versions/latest/sdk/sqlite/