java .lang.FileNotFoundException в Android / Kotlin, даже если файл присутствует - PullRequest
0 голосов
/ 26 апреля 2020

У меня есть класс данных с именем Contact, у которого есть свойство сопутствующего объекта 'allContacts: список', которое возвращает контакты после анализа их из файла JSON.

Соответствующий код:

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

У меня действительно есть контакты. json в пакете res / data. (пакет данных создан вручную).

Вот доказательство:

enter image description here

Почему это происходит? Файл контактов. json не включен в окончательный пакет .apk?

Я попытался записать текущий путь приложения, используя

Log.i('.MainActivity', System.getProperty('user.dir'))

Но всегда получаю . в Logcat .

РЕДАКТИРОВАТЬ: Я декомпилировал apk в Android Studio и не нашел никаких следов контактов. json

1 Ответ

1 голос
/ 26 апреля 2020

Ваш файл не существует в той же директории проекта, в которой вы его ожидаете. Вы должны создать каталог ресурсов 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.
}
...