Есть файл с простой разметкой (как .ini).
Разметка например такая:
[A1]
1=Текст A1-№1
2=Текст A1-№2
..........
[A2]
1=Текст A2-№1
2=Текст A2-№2
Как правильно и в какой папке хранить такие текстовые файлы, из которых я собираюсь формировать текст для вывода в TextView?
Как формировать запрос на поиск нужного текста с такой разметкой?
Может в JAVA есть аналог ini разметки?
Ответ
Для хранения произвольных файлов в структуре приложения Android выделены папки /assets и /res/raw. Доступ к этим ресурсам возможен только на чтение.
Различия кроются в способе доступа и организации хранения этих файлов.
Ресурсы в папке /assets могут иметь произвольную структуру подкаталогов, имен файлов и доступ к ним организуется через класс AssetManager, отдельные файлы не имеют идентификаторов в классе R.java, доступ к ним организуется напрямую по имени файла. Подробнее про ресурсы /assets
Ресурсы в папке /res/raw не могут иметь структуры подкаталогов, доступ к ним осуществляется по идентификатору, заданному в R.java, через синтаксис R.raw.*. Так же такие файлы несколько ограничены типом - разрешено хранить аудио, видео, html-страницы, текстовые файлы и тп. Подробнее о каталоге res/raw/
Кроме того, существует каталог /res/xml/, в котором можно хранить произвольные XML файлы (файлы структурированой информации, аналогичной той, которая представлена в вашем вопросе). Ресурсы так же имеют идентификаторы в R.java и обращаются к ним через R.xml.*. Подробнее
Перечисленные выше места хранения используются только для хранения статической информации - ее можно читать, но нельзя изменить или (до-)переписать.
Если вам требуется доступ и на запись, то в таком случае файлы хранятся вне структуры приложения, на внешнем носителе. По умолчанию система Android выделяет для каждого приложения область на внешнем диске (по пути /data/data/
Отличие в хранении в выделенной для приложения области в том, что эта область никаким образом недоступна другим приложениям (за исключением приложений с root-правами), так же при удалении приложения эта область удаляется вместе с ним. При хранении на SD-карте, доступ к данным может получить кто угодно и они не уничтожаются вместе с приложением при его деинсталяции.
Альтернативным способом хранения может быть запись значений в таблицу SQLite. Этот способ оправдан при необходимости делать произвольные выборки, а так же связывать различные данные (содержимое таблиц) между собой, так как организация работы с БД требует больших трудозатрат и дополнительных знаний в области СУБД - при простом хранении набора данных выгоднее и "дешевле" хранить его в структурированном файле.
Тем не менее, вы так же можете подготовить БД и разместить ее в каталоге /assets, а затем скопировать на устройство (один из примеров). При этом база данных с которой могут работать классы Android может располагаться только в специальной выделенной области приложения по пути */data/data/
Аналоги INI файлов со встроенными в Android API инструментами для обработки - файлы форматов JSON и XML.
При довольно распространенном паттерне, когда требуется какой то заполненный данными файл, который потом необходимо модифицировать, поступают следующим образом: файл помещают в каталог /assets, при старте приложения его копируют оттуда в область выделенную приложению или на SD-карту и затем уже работают с скопированным файлом. Файл в /assets при этом остается в первоначальном состоянии и фактически является балластом, но ничего не поделаешь.
Так же есть вариант создание файла динамически из кода, в некоторых случаях это позволяет существенно сократить объем приложения, то же относится и к заполнению таблиц SQLite.
Комментариев нет:
Отправить комментарий