Работа с файловой системой
Чтение и сохранение файлов
Работа с настройками уровня activity и приложения позволяет сохранить небольшие данные отдельных типов (string, int), но для работы с большими массивами данных, такими как графически файлы, файлы мультимедиа и т.д., нам придется обращаться к файловой системе.
ОС Android построена на основе Linux. Этот факт находит свое отражение в работе с файлами. Так, в путях к файлам в качестве разграничителя в Linux использует слеш «/», а не обратный слеш «\» (как в Windows). А все названия файлов и каталогов являются регистрозависимыми, то есть «data» это не то же самое, что и «Data».
Приложение Android сохраняет свои данные в каталоге /data/data/ / и, как правило, относительно этого каталога будет идти работа.
Для работы с файлами абстрактный класс android.content.Context определяет ряд методов:
boolean deleteFile (String name) : удаляет определенный файл
String[] fileList () : получает все файлы, которые содержатся в подкаталоге /files в каталоге приложения
File getCacheDir() : получает ссылку на подкаталог cache в каталоге приложения
File getDir(String dirName, int mode) : получает ссылку на подкаталог в каталоге приложения, если такого подкаталога нет, то он создается
File getExternalCacheDir() : получает ссылку на папку /cache внешней файловой системы устройства
File getExternalFilesDir(String type) : получает ссылку на каталог /files внешней файловой системы устройства
File getFileStreamPath(String filename) : возвращает абсолютный путь к файлу в файловой системе
FileInputStream openFileInput(String filename) : открывает файл для чтения
FileOutputStream openFileOutput (String name, int mode) : открывает файл для записи
Все файлы, которые создаются и редактируются в приложении, как правило, хранятся в подкаталоге /files в каталоге приложения.
Для непосредственного чтения и записи файлов применяются также стандартные классы Java из пакета java.io.
Итак, применим функционал чтения-записи файлов в приложении. Пусть у нас будет следующая примитивная разметка layout:
Поле EditText предназначено для ввода текста, а TextView — для вывода ранее сохраненного текста. Для сохранения и восстановления текста добавлены две кнопки.
Теперь в коде Activity пропишем обработчики кнопок с сохранением и чтением файла:
При нажатии на кнопку сохранения будет создаваться поток вывода FileOutputStream fos = openFileOutput(FILE_NAME, MODE_PRIVATE)
В данном случае введенный текст будет сохраняться в файл «content.txt». При этом будет использоваться режим MODE_PRIVATE
Система позволяет создавать файлы с двумя разными режимами:
MODE_PRIVATE : файлы могут быть доступны только владельцу приложения (режим по умолчанию)
MODE_APPEND : данные могут быть добавлены в конец файла
Поэтому в данном случае если файл «content.txt» уже существует, то он будет перезаписан. Если же нам надо было дописать файл, тогда надо было бы использовать режим MODE_APPEND:
Для чтения файла применяется поток ввода FileInputStream :
Подробнее про использование потоков ввода-вывода можно прочитать в руководстве по Java: https://metanit.com/java/tutorial/6.3.php
В итоге после нажатия кнопки сохранения весь текст будет сохранен в файле /data/data/название_пакета/files/content.txt
Где физически находится созданный файл? Чтобы увидеть его на подключенном устройстве перейдем в Android Stud в меню к пункту View -> Tool Windows -> Device File Explorer
После этого откроектся окно Device File Explorer для просмотра файловой системы устройства. И в папке data/data/[название_пакета_приложения]/files мы сможем найти сохраненный файл.
Источник
Как создать папку каталога в Android Studio
Я использую Android Studio, здесь я хочу создать папку в папке lib. Я щелкаю правой кнопкой мыши по папке lib, но опция каталога не отображается. Может кто-нибудь предложить мне, как создать папку каталога внутри папки?
5 ответов
Попробуйте создать пакет вместо каталога. Похоже, Create New Package и Create New Directory просто создадут папку в каталоге lib.
Шаг 1. В Android нет предварительно выбранной опции для добавления необработанной папки в отличие от папки «Ресурсы». Откройте папку приложения и выберите папку res
Шаг 2: Щелкните правой кнопкой мыши по папке res, выберите New> Directory, затем студия откроет диалоговое окно и попросит вас ввести имя.
Шаг 3: Напишите «raw» и нажмите «ОК». Откройте папку res и под ней вы найдете свою необработанную папку.
Теперь вы создали необработанную папку в вашем проекте.
Да, у меня была та же проблема, так что вам просто нужно выполнить следующие шаги:
1) Перейти к структуре проекта Здесь:
2) Зайдите в Модули и найдите вкладку «Источники» Нажмите здесь
3) Снимите флажок с источников и нажмите «Применить»! (вначале он был отключен и не работал, но когда я установил флажок «Источники», мои папки изменились, как было в начале (например, пакеты), поэтому я снова снял флажок и папки изменились, и теперь я могу создавать каталоги , а не пакеты, надеюсь, это помогло вам!)
Это проблема IntelliJ в том, как они работают с папками, помеченными как исходные. Папка lib должна быть исходной папкой для внутренних задач. Для создания папки лучше всего использовать файловый менеджер или терминал.
Вы можете использовать встроенный терминал IDE для создания папок.
Источник
Полный список
— работаем с файлами
Работа с файлами в Android не сильно отличается от таковой в Java. В этом уроке рассмотрим, как записать/прочесть файл во внутреннюю память и на SD-карту.
Project name: P0751_Files
Build Target: Android 2.3.3
Application name: Files
Package name: ru.startandroid.develop.p0751files
Create Activity: MainActivity
Рисуем экран main.xml:
4 кнопки, смысл которых понятен по тексту на них.
В onclick обрабатываем нажатия 4-х кнопок и вызываем соответствующие методы.
writeFile – запись файла во внутреннюю память. Используется метод openFileOutput, который на вход берет имя файла и режим записи: MODE_PRIVATE – файл доступен только этому приложению, MODE_WORLD_READABLE – файл доступен для чтения всем, MODE_WORLD_WRITEABLE — файл доступен для записи всем, MODE_APPEND – файл будет дописан, а не начат заново.
readFile – чтение файла из внутренней памяти. Используем метод openFileInput, принимающий на вход имя файла. Здесь и в методе записи внутреннего файла вы можете задать только имя файла, а каталог для ваших файлов вам уже выделен.
writeFileSD – запись файла на SD. Используем метод getExternalStorageState для получения состояния SD-карты. Здесь можно посмотреть какие бывают состояния. Нам нужно MEDIA_MOUNTED – когда SD-карта вставлена и готова к работе. Далее мы получаем путь к SD-карте (метод getExternalStorageDirectory), добавляем свой каталог и имя файла, создаем каталог и пишем данные в файл.
readFileSD – чтение файла с SD. Все аналогично предыдущему методу, только файл не пишем, а читаем.
Осталось в манифест добавить разрешение на работу с файлами на SD — android.permission.WRITE_EXTERNAL_STORAGE.
Все сохраним и запустим. Видим экран с 4-мя кнопками:
Внутренняя память
Жмем кнопку Записать файл. Видим в логе:
Проверим. Идем в File Explorer (Window > Show View > Other > Android > File Explorer) и открываем там папку data/data/ru.startandroid.develop.p0751files/files и видим там наш файл file.
Возвращаемся в эмулятор. Жмем Прочесть файл и в логе видим:
Это тот текст, который мы записывали в файл.
SD карта
Теперь жмем Записать файл на SD.
Файл записан на SD: /mnt/sdcard/MyFiles/fileSD
Проверяем. Идем в FileExplorer и открываем там папку mnt/sdcard/MyFiles/ а в ней файл fileSD.
Возвращаемся в эмулятор и жмем кнопку Прочесть файл с SD. В логе видим:
Содержимое файла на SD
Этот текст мы и записывали.
mnt/sdcard — обычно этот путь ведет к содержимому SD-карты. Возможно у вас он будет другой.
В общем, при работе с файлами на SD вы используете стандартные java механизмы. А при работе с внутренним хранилищем для удобства можно использовать методы-оболочки от Activity:
openFileOutput – открыть файл на запись
openFileInput – открыть файл на чтение
И есть метод getFilesDir – возвращает объект File, соответствующий каталогу для файлов вашей программы. Используйте его, чтобы работать напрямую, без методов-оболочек.
Подробности работы в java с файловой системой я здесь описывать не буду. На нашем форуме пользователь SKR сделал отличную памятку по работе с файлами. Скорее всего, вы найдете там все что нужно.
Если у вас проверка SD-карты показывает, что карта недоступна (см. лог), то убедитесь в свойствах AVD, что у вас для SDCard указан Size или File. Если указаны, то попробуйте перезапустить AVD.
На следующем уроке:
— создаем экран с вкладками
— используем иконку в названии вкладки
— используем обработчик перехода между вкладками
Присоединяйтесь к нам в Telegram:
— в канале StartAndroid публикуются ссылки на новые статьи с сайта startandroid.ru и интересные материалы с хабра, medium.com и т.п.
— в чатах решаем возникающие вопросы и проблемы по различным темам: Android, Kotlin, RxJava, Dagger, Тестирование
— ну и если просто хочется поговорить с коллегами по разработке, то есть чат Флудильня
— новый чат Performance для обсуждения проблем производительности и для ваших пожеланий по содержанию курса по этой теме
Источник
Как создать новую папку res в Android Studio
Я хочу добавить локализованные строки для своего приложения для Android. Поэтому мне нужна папка values-xx в моей папке Res.
В исходной папке значений есть синяя точка, поэтому я попытался создать новый пакет, но пакет не может содержать дефис, поэтому это должно быть неправильно. Вместо этого я попытался щелкнуть правой кнопкой мыши по res и выбрать «Создать» -> «Каталог ресурсов Android», но на этот раз ничего не произошло. Насколько я могу судить, никакого диалога или какой-либо реакции.
Как мне создать папку values-xx?
Изменить: я могу создать папку из файлового проводника, и все работает хорошо. Просто раздражает то, что невозможно сделать это изнутри Android Studio.
Edit2: эта ошибка исправлена в более новых версиях Android Studio.
7 ответов
Эта ошибка исправлена в новых версиях Android Studio.
Когда вы находитесь в представлении Android (а не в Project или Packages) в Android Studio, вам просто нужно щелкнуть правой кнопкой мыши каталог «values» и выбрать «New»> «Values resource file».
Это дает вам выбор различных ресурсов, которые вы можете добавить. Например, если вы хотите добавить в приложение другой язык, вы можете выбрать параметр «Язык» и нажать кнопку «>>». Если вы хотите суахили, выберите его из списка, введите «строки» в качестве имени файла и нажмите OK.
Android Studio автоматически создаст каталог values-sw с новым файлом strings.xml в нем. А в режиме просмотра файлов Android вы можете просматривать оба строковых файла вместе.
Аналогичный процесс применяется для добавления других типов ресурсов (см. Другой мой пример). Вам больше не нужно вручную добавлять каталоги (но вы также можете сделать это, щелкнув правой кнопкой мыши каталог res и выбрав «Создать»> «Каталог ресурсов Android»).
У меня была такая же проблема: я создал папку values-xx внутри основного каталога (main >> щелкните правой кнопкой мыши >> новый >> каталог), а затем переместил эту папку в каталог res /.
Это не красиво, но это обходной путь для создания папки с Android Studio.
Созданная нами папка values-xx не отображается, но когда мы создаем файл, он спрашивает => Я создал папку values-21, а затем попытался создать xml, и он запрашивает выбор каталога => Я обновился до Android 1.02
Проверьте значения-21
Предположим, я хочу создать папку с именем «Дневной свет» в разделе res.
Шаг 1: Щелкните правой кнопкой мыши на res.
Шаг 2: Затем перейдите в Новый.
Шаг 3: Затем перейдите в папку.
Шаг 4: Затем перейдите в Res Folder Option и выберите.
Шаг 5: В этом окне установите флажок «Изменить расположение папки».
И, как предполагалось, мы должны создать папку «Дневной свет»
Шаг 6: Назовите вновь созданную папку дневным светом в этом формате. src / main / res / дневной свет
Шаг 7: Затем, наконец, нажмите «Готово».
Если вы уже создали новый каталог, но просто не видите его в окне «Инструменты проекта». Сделай это
Щелкните Окно «Инструменты проекта» >> Android (раскрывающееся меню) >> Щелкните «Проект» . Теперь вы увидите все свои каталоги в разрешении. Смотрите картинку:
Все очень просто. Сначала у меня тоже были проблемы. Давайте разберемся по шагам: — 1) Откройте свой проект 2) Щелкните правой кнопкой мыши папку res 3) Выберите New 4) Выберите каталог 5) Назовите каталог.
Это оно!! Это всегда работает для нового проекта!
Источник
Добавление папки с данными в Android Studio
Android Studio еще раз изменила структуру своего проекта. теперь это
Я смотрю всюду онлайн, но я не могу найти, куда положить папку с ресурсами. Когда я пытаюсь создать папку через просмотрщик каталогов в Android Studio (щелкните правой кнопкой мыши, New. ), опция «directory» недоступна. Доступны только следующие опции:
Ни один из них не сделает то, что я хочу здесь.
Кто-нибудь понял это?
Чтобы указать любую дополнительную папку с ресурсами, я использовал ее с моим Gradle. Это добавляет moreAssets , папку в корне проекта, к активам.
Изображение в Android Studio 1.5.1.
В рамках проекта «Android» (см. раскрывающийся список в моем изображении) щелкните правой кнопкой мыши на приложении.
Вы можете щелкнуть по окну проекта, нажать Alt-Insert и выбрать Folder- > Assets Folder. Android Studio добавит его автоматически в нужное место.
Вы, скорее всего, смотрите на свой проект с новым (ish) «Android View». Обратите внимание, что это представление, а не фактическая структура папок на диске (которая не изменилась с момента появления Gradle в качестве нового инструмента сборки). Вы можете переключиться на старый «Project View», нажав на слово «Android» в верхней части окна Project и выбрав «Project».
Согласно новому Gradle based build system . Мы должны положить assets в папку main .
Или просто щелкните правой кнопкой мыши на своем проекте и создайте его как
Файл > Создать > папкa > активы Папка
Источник