Главная » Программирование игр под Android » Поддержка файловой системы – РАЗРАБОТКА ИГР ДЛЯ ОС ANDROID

0

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», пер. Егор Сидорович, Евгений Зазноба, Издательство «Питер»

По теме:

  • Комментарии