Android предлагает нам несколько способов чтения и записи файлов. В этом разделе мы рассмотрим вопросы работы с ресурсами и доступ к внешнему хранилищу (которым чаще всего является SD-карта). Начнем с ресурсов.
Работа с ресурсами
Мы изучили набор каталогов, входящих в проект Android, и определили папки assets/ и res/ как контейнеры для наших файлов, поставляемых вместе с нашим приложением. При обсуждении файла манифеста я говорил, что мы не будем использовать каталог res/, поскольку это накладывает ограничения на внутреннюю структуру. Папка assets/ – это место, куда будем помещать все наши файлы с той иерархией каталогов, которая нам нравится.
Доступ к файлам из assets/ осуществляется с помощью класса AssetManager. Получить ссылку на этот класс можно так:
С интерфейсом Context мы уже ранее сталкивались – он реализуется классом Acti vity. В реальной жизни мы будем получать AssetManager как раз от активности.
Теперь, когда у нас есть AssetManager, мы можем начать открывать файлы примерно так:
Этот метод возвращает старый добрый Java InputStream, с помощью которого можно читать любой тип файла. Единственный аргумент метода AssetManager. ореп – имя файла, связанное с папкой активов. В предыдущем примере у нас есть два каталога в папке assets/, при этом второй (dir2/) является дочерним для первого (di г/). В проекте Eclipse файл будет расположен в assets/di r/di г2/.
Создадим простую тестовую активность для проверки этого функционала. Нам нужно загрузить текстовый файл myawesometext. txt из подкаталога texts директории assets/. Содержимое этого файла будет показываться в TextVi ew. Листинг 4.7 демонстрирует исходный код этой потрясающей активности.
Листинг 4.7. AssetsTest.java, демонстрирующий чтение файла активов package com.bad.ogiс.androidgames;
Никаких сюрпризов, за исключением того, что загрузка простого текста из InputStream в Java довольно многословна. Я написал маленький метод oadTextFi1е, выдавливающий все байты из InputStream и возвращающий их в виде строки. В данном случае я подразумеваю, что кодировка файла – UTF-8. Остаток кода – отлавливание и обработка различных исключений. Рисунок 4.10 показывает вывод этой маленькой активности.
Рис. 4.10. Вывод текста
Из этого раздела вы должны вынести следующие моменты.
Загрузка текстового файла из InputStream в Java несколько запутанна. Обычно мы будем осуществлять эту операцию с помощью других методов, например Apache IOUtils. Я оставлю это вам в качестве домашнего задания.
Мы можем только читать ресурсы, но не изменять их.
Мы можем легко изменить метод 1oadTextFi1е, чтобы он загружал не текстовые, а двоичные данные. Для этого необходимо лишь возвращать вместо строки массив байтов.
Источник: Mario Zechner / Марио Цехнер, «Программирование игр под Android», пер. Егор Сидорович, Евгений Зазноба, Издательство «Питер»