Чтение из txt файла в assets
Двое суток читала всё по этому поводу на Stack Overflow, но ответы все многолетней давности и указанные там способы через класс AssetManager не работают - android studio вся красная от ошибок. Сейчас так:
try {
FileInputStream fileInput = openFileInput("txt.txt");
InputStreamReader reader = new InputStreamReader(fileInput);
BufferedReader buffer = new BufferedReader(reader);
StringBuffer strBuffer = new StringBuffer();
String lines;
while ((lines = buffer.readLine()) != null) {
strBuffer.append(lines + "\n");
}
txtShow.setText(strBuffer.toString());
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
Код работает, но только если txt.txt создан на виртуальном диске эмулятора. В противном случае ошибка:
W/System.err: java.io.FileNotFoundException: /data/user/0/ru.ann.test/files/txt.txt (No such file or directory) W/System.err: at java.io.FileInputStream.open0(Native Method)
Я хочу работать с эмулятором, с файлом в директории app/src/main/assets/ Как этого добиться в реалиях 2020-го года? Спасибо.
Ответы (1 шт):
Вы открываете файл не из того места. Вы пытаетесь его в файловой системе найти, а не в assets.
Вот рабочий код на kotlin для получения содержимого файла из assets в виде строки:
fun readFromAssets(context: Context, filename: String): String {
val reader = BufferedReader(InputStreamReader(context.assets.open(filename), "UTF-8"))
// do reading, usually loop until end of file reading
val sb = StringBuilder()
var line: String? = reader.readLine()
while (line != null) {
sb.append(line) // process line
line = reader.readLine()
}
reader.close()
return sb.toString()
}