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