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.
}
我有一个名为 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.
}