#android #kotlin #android-contentresolver
#Android #kotlin #android-contentresolver
Вопрос:
У меня есть файл test.docx содержит 1 слово «Тестирование». Этот файл находится в моей папке Dropbox, и я открываю его из приложения с помощью ContentResolver.
Код:
val inputStream = context.contentResolver.openInputStream(uri)
val allText = inputStream.bufferedReader().use(BufferedReader::readText)
base64Image = Base64.encodeToString(allText.toByteArray(), Base64.NO_WRAP)
allText возвращает некоторые данные, но при помещении этого в текстовый файл и сохранении его как .docx я не могу его просмотреть, он сломан. Я думаю, мне следует добавить кодировку в метод BufferedReader. Пробовал пару, но ни один из них не работает.
Каким должен быть правильный код для этого?
Ответ №1:
DOCX
это не обычный текст. Это двоичный формат. Используется readBytes()
для чтения в байтах:
val bytes = context.contentResolver.openInputStream(uri).readBytes()
Имейте в виду, что ваше приложение выйдет из строя из OutOfMemoryError
-за большого содержимого. Пожалуйста, пересмотрите свой план чтения всего содержимого, не говоря уже о преобразовании его в base64.