java.lang.FileNotFoundException in Android/Kotlin 即使文件存在

java.lang.FileNotFoundException in Android/Kotlin even though file is present

我有一个名为 Contact 的数据 class,它有一个伴随对象 属性 'allContacts: List',returns 在从 JSON 文件解析它们之后联系了它们。

相关代码:

val allContacts: List<Contact>
            get() {
                val json = JSONObject(File("app/src/main/res/data/contacts.json").readText()).getJSONArray("contacts")
                val contacts = mutableListOf<Contact>()
                ...

我确实在 res/data 包中有一个 contacts.json。 (手动创建的数据包)。

证明如下:

为什么会这样? contacts.json 文件是否未包含在最终的 .apk 中?

我尝试使用

记录应用程序的当前路径
Log.i('.MainActivity', System.getProperty('user.dir'))

但总是在Logcat中得到.

编辑:我在 Android Studio 中反编译了 apk,没有发现 contacts.json

的痕迹

您的文件不在您期望的同一项目目录中。 您必须创建一个资源目录 raw 并将您的文件粘贴到其中。 然后,您可以在需要引用文件的任何地方将文件引用为 R.raw.contacts

读取文件是另一回事。

我发现最好创建一个单独的顶级扩展函数来读取和返回文件内容

fun Activity.readFile(fileID: Int): String {
 val inputStream = this.resources.openRawResources(fileID)
 return inputStream.use{it.readText()} // Returns entirety of file contents as string.
}