Где хранятся все файлы в андроид – описание местоположения всех важных файлов в системе

Где хранятся все файлы в андроид – описание местоположения всех важных файлов в системе

Операционная система Android значительно отличается от ОС Windows. Например, если при скачивании файла на Windows мы сами выбираем папку для загрузки, то в случае с Android используется одно хранилище. А куда именно загружаются файлы? Давайте разбираться.

Где хранятся скачанные файлы?

Если мы говорим про файлы, которые пользователи скачивают из сети, то для них обычно используется папка Download. Чтобы найти ее, необходимо использовать любой файловый менеджер, например, ES Проводник, как в нашем случае.

Заходим и ищем папку Download. Обратите внимание: если у вас установлена карта памяти, то на ней может быть автоматически создана папка Download, куда помещаются скачанные файлы.

Где хранятся все файлы в андроид – описание местоположения всех важных файлов в системе

  • А вот скачанный файл в папке Download.

Где хранятся все файлы в андроид – описание местоположения всех важных файлов в системе

Со скачанными файлами разобрались. Теперь переходим к еще более интересному вопросы — куда скачиваются APK-файлы? Разумеется, они точно также хранятся в файловой системе, но доступ к ним просо так не получить — необходимо получить рут-права, а последние, как известно, «снимают» устройство с гарантии. Помните об этом, если решить получить рут-права для своего девайса.

Как и в предыдущем случае, нам понадобится файловый менеджер. Запускаете его, при необходимости предоставляете ему нужные права. Дальше проходите по пути /Data/App — здесь хранятся скачанные файлы с разрешением APK. Обратите внимание, что путь может быть другим в зависимости от вашей файловой системы.

Собственно, вот сами файлы.

Где хранятся все файлы в андроид – описание местоположения всех важных файлов в системе

Их даже можно скопировать и установить при желании, хотя лучше с ними ничего не делать вообще — во избежании каких-либо возможных проблем.

Друзья! Если наш сайт помог вам или просто понравился, вы можете помочь нам развиваться и двигаться дальше. Для этого можно:

  • Оставить комментарий к статье.
  • Подписаться на наш канал на YouTube.
  • Подписаться на нашу группу ВКонтакте.

Спасибо!

Источник: https://androidnik.ru/gde-xranyatsya-apk-fajly-android/

Android: что и где хранится? Где хранятся данные приложений android. Структура и назначение папок и файлов в Android

При использовании приложений под Android иногда появляются вопросы: «А где приложение хранит созданные файлы?», «Можно ли до них достучаться?» и «Удалятся ли файлы при удалении приложения?» Давайте попробуем посмотреть, где же приложение может хранить свои данные и какие последствия это имеет для пользователя.

Внутреннее хранилище данных

Смысл следует непосредственно из названия. Внутреннее хранилище (internal storage) располагается всегда в памяти смартфона вне зависимости от того, есть ли возможность установки карты памяти (и тем более того, вставлена ли она). Эта область памяти является защищенной.

Находится в системном разделе /data. По умолчанию все файлы, которые там располагаются, доступны только тому приложению, которое их создало. Разумеется, можно сделать файлы доступными для других приложений, но это надо делать специально.

Если приложение не открывает файлы для доступа извне, достучаться к ним можно будет только получив root.

Назначение хранилища понятно: внутренние защищенные данные, к которым не должно быть нерегламентированного доступа. Проблемы (с точки зрения пользователя) могут быть в следующих случаях:

  • Неоправданно большой объем данных. Хочется вынести данные на карту памяти, чтобы сэкономить внутреннее пространство для других нужд, а приложение не дает.
  • По мнению пользователя, регламент доступа к данным должен быть другим, не таким, как предлагает приложение.

Где хранятся все файлы в андроид – описание местоположения всех важных файлов в системе

Пример: приложение «Лекции по истории России». В приложении хороший контент (и по содержанию, и по качеству звука). Но сохраняется он во внутреннюю память. На бюджетных устройствах, где этой памяти мало, становится затруднительным закачать заранее много лекций, а потом, отключившись от интернета, слушать их.

Второй проблемой становится собственно регламент доступа к данным. Даже если ограничиться тематикой истории, у меня есть аудиофайлы, полученные из трех источников: данное приложение, подкасты и аудиоверсии роликов с youtube.

Хочется взять и объединить навек в их земной юдоли под владычеством всесильным Властелина Мордора их все в единый плейлист, и слушать его одним аудиоплеером. Но на смартфоне без root это сделать невозможно.

Где хранятся все файлы в андроид – описание местоположения всех важных файлов в системе

Внешнее хранилище «личных» данных

С точки зрения разработчика, кроме внутреннего хранилища данных, для персональных целей приложения есть еще внешнее хранилище. Оно необязательно размещается на карте памяти. Это может быть и внутренняя память смартфона, но весь раздел с такими данными размещается в общем доступе. В корне раздела есть папка Android/data, а в ней — подпапки с именами пакетов приложений.

Где хранятся все файлы в андроид – описание местоположения всех важных файлов в системе

Плюсы такого подхода очевидны: данные доступны извне для целей пользователя. А если это карта памяти, то и емкость может быть ограничена только вашими финансами (в продаже уже можно найти карты памяти на 400 гигабайт).

Минусы тоже понятны: в любой момент любое приложение (конечно, имеющее разрешение на доступ к «внешним» данным) может взять и стереть чужие файлы.

Также файлы будут удалены системой при удалении приложения (или при очистке его данных).

Пример приложения: подкаст-менеджер BeyondPod (более-менее свежей версии, раньше файлы хранились по-другому). Пользователь имеет доступ к скачанным подкастам и может легко удалять их (например, в целях экономии места) или слушать их во внешнем плеере.

Общее внешнее хранилище

Источник: https://ZTEgid.ru/blog/proshivka/bazy-dannyh-au-ili-gde-hranyatsya-dannye-mysql-na-vashem-kompyutere.html

Структура и назначение папок и файлов в Android

В данной статье вы узнаете какие папки (директории) в Android существуют, какие файлы в них находятся, за что отвечают данные папки и файлы и зачем они нужны.

Где хранятся все файлы в андроид – описание местоположения всех важных файлов в системе

Предисловие о структуре

  • У многих есть компьютер и на них установлена ОС Windows. Все прекрасно знают, что в данной ОС все распределено по дискам:
  • C: — на данном диске находиться система
  • D: —  для личных файлов (диска может и не быть, если он не «разбит»)
  • E: — Z: — флешки, переносные жесткие диски, CD или DVD приводы.

В Windwows все рассредоточено по различным дискам. В UNIX/Linux куда входит и Android (а также BSD, куда входит Mac OS X) все выглядит все немного иначе. Файловая структура имеет древовидный вид. Возможно сейчас не понятно, но дальше с прочтением статьи будет более понятно.

Также стоит знать что Android как и в Linux, в отличие от Windows очень чувствительны к регистру.  Например папка Name, NaMe, name, NAME — это 4 разных папки, тогда как Windows сможет создать только одну папку с таким именем.

Для того чтобы было более понятно о чем идет речь, рекомендуется установить файловый менеджер Root Browser.

Где хранятся все файлы в андроид – описание местоположения всех важных файлов в системе

Структура и назначение папок и файлов Android

Как было выше сказано — структура имеет древовидный вид. У любого дерева имеется корень, в UNIX/Linux он также существуют. Корень — это отправной пункт в файловой структуре, с корня система обрастает папками и файлами. Корень в UNIX/Linux отмечается как знак:

/

[spoiler title=»подробно о разделе cache» ]

В данном разделе находятся временные файлы в момент загрузки Android, а также  сюда загружаются обновления системы «по воздуху» — update.zip.

  1. [/spoiler]
  2. [spoiler title=»подробно о разделе dev» ]
  3. /dev/ — в данном разделе содержится информация о устройствах системы и файлов.
  4. [/spoiler]
  5. [spoiler title=»подробно о разделе data» ]
  6. раздел /data/ — пользовательский раздел в котором находятся установленные приложения, личные настройки
  7. папка /data/app — здесь находятся установленные приложения, игры.
  8. папка /data/app-lib — дополнительные библиотеки необходимые для работы определенных приложений (присутствует в новых версиях Android).
  9. папка /data/dalvik-cache — кеш-память, для работы Java машины Dalvik которая  является «двигателем» в Android отвечающая за запуск и работу приложений.
  10. папка /data/data — в данной папке находятся  индивидуальные настройки каждого пользовательского приложения, библиотеки и другие файлы необходимые файлы для их работы.
  11. папка /data/system/ — в данном разделе находятся глобальные настройки пользовательского окружения, синхронизация, аккаунты, блокировка.

файлы gesture.key, locksettings.db, locksettings.db-shm, locksettings.db-wal — графический ключ, пин-код.

  • [/spoiler]
  • [spoiler title=»подробно о разделе efs» ]
  • раздел  /efs/ —  находится файлы и папки отвечающие за IMEI (данный раздел имеется не во всех Android).
  • [/spoiler]
  • [spoiler title=»подробно о разделе preload» ]
  • раздел /preload/ — в данном разделе находятся дополнительные файлы и папки, которые зеркалируются в раздел /system/ (данный раздел имеется не во всех Android, преимущественно в Samsung).
  • [/spoiler]
  • [spoiler title=»подробно о разделе system» ]
  • раздел /system/ — данный раздел содержит системные папки и файлы необходимые для функционирования Android.
  • папка /system/app — здесь находятся системные приложения и сервисы (в новых ОС Android сервисные приложения вынесли в другую папку priv-app).
  • папка /system/bin и /system/xbin — папка содержит файлы и ссылки на исполняемые бинарные файлы.
  • файл /system/xbin/su — файл отвечающий за Root права.
  • папка /system/camerdata — в данной папке находятся файлы отвечающие за работу камеры.
  • папка /system/etc — в данной папке находятся конфигурационные файлы необходимые  при загрузке ОС а также необходимые в процессе работы различных программ.

папка /system/init.d — в данной папке находятся скрипты, которые могут влиять на работу системы.

файл /system/etc/ hosts — файл отвечающий за блокировку, переадресацию  веб адресов.

файл /system/etc/ apns.conf — файл с информацией о точках доступах интернет (APN).

файл /system/etc/ gps.conf — настройки GPS.

  1. папка /system/fonts — папка с системными шрифтами.
  2. папка /system/framework — папка с «процессами» Android.
  3. папка /system/lib/ — библиотеки системных приложений и сервисов.
  4. папка /system/lib/modules — драйверы системы.
  5. папка /system/media — папка с системными звуками и анимацией включения.

файл /system/media/bootanimation.zip —  исполняемый архив с загрузочной анимацией.

папка /system/priv-app — папка с сервисами/приложениями Android.

папка /system/tts

Источник: https://androidp1.ru/struktura-i-naznachenie-papok-i-faylov-v-android/

Android: что и где хранится?

Я считаю, что каждый более или менее “прошаренный” пользователь устройства на базе ОС Android должен знать, что хранится на его аппарате и в каких папках. Поэтому сегодня я хочу рассказать именно о структуре и предназначении системных каталогов.

Отличия семейства Linux/Android от Windows

Для начала пройдемся по базе. Линуксойдов и любителей поумничать просим пропустить этот раздел и идти дальше, тут мы материал излагаем максимально упрощенно.

Почти все мы пользуемся персональными компьютерами с той или иной версией операционной системы Windows. В ней информация распределяется по дискам. Обычно С это системный раздел, D предназначен для хранения данных, а каталоги от E до Z представляют собой съемные носители.

В семействе Linux все выглядит немного иначе. Там файловая структура задана древовидной архитектурой. Если вы хотя бы один раз заходили при помощи файлового менеджера в каталог своего Android устройства, то абсолютно точно представляете, как выглядит это дело.

Хочу обратить внимание читателей на то, что Windows обычно не реагирует на регистр. Большие буквы там, маленькие, смешанные – все это компьютеру просто до лампочки. Но попробуйте задать 4-ем папкам в Android имена Pack, pack и PACK – и система воспримет их как все разные.

Назначение разделов

Когда на телефоне идет загрузка какого-то файла через Интернет, они сохраняются в разделе cache. Сюда же попадают и файлы обновлений “по воздуху”. Они, кстати, имеют название “update.zip”.

Подробного объяснения требует папка data. В ней содержится несколько каталогов. Например, data app – в него устанавливаются игры и приложения. 

В app-lib можно найти дополнительные библиотеки файлов и конфигураций, которые предназначены для работы того или иного отдельного приложения. Примечание: чаще всего app-lib встречается именно в новых версиях Android.

В операционной системе есть Java-машина, называемая Dalvik. Она играет роль своеобразного двигателя, поскольку запускает приложения и следить за их работой. Так вот, для функционирования Java-машины предусмотрен каталог dalvik-cache

Интересно и удивительно увидеть внутри папки data еще одну “дату”. Но вы не пугайтесь: этот каталог используется системой для хранения индивидуальных настроек каждого отдельного приложения. 

Читайте также:  Какой антивирус лучше для андроид – рейтинг программ

Раздел system хранит в себе тоже настройки. Но уже глобального плана. Например, настройки блокировки устройства, аккаунтов на нем, синхронизации данных на аппарате. 

В data находятся не только папки, но и отдельные файлы. Это gesture.key, например. Он отвечает за алгоритм блокировки.

Каталог efs есть не на всех версиях ОС Android. В нем находятся одиночные файлы и папки, так или иначе связанные с IMEI устройства. 

Кстати, иногда раздел system перекликается с разделом preload, в котором сохраняются дополнительные папки и файлы.

Раз уж затронули эту тему, то объясню, какими функциями занят каталог system. Мы сейчас говорим о том, что идет отдельно, а не входит в состав раздела data. Так вот, в каталоге system есть несколько ответвлений. 

Например, app. Тут расположились именно системные приложения и программы, а также сервисы. Примечание: в новых версия редакции Android они вынесены в папку priv-app.

Каталоги bin и xbin отвечают за содержание файлов и ссылок на исполняющие бинарные алгоритмы. В общем-то, как и на обыкновенном персональном компьютере. Внутри xbin можно найти файл под именем su (от слов Super User). Как вы уже могли догадаться, этот файл отвечает з а права супер-пользователя (Root-права).

Camerdata содержит в себе сборки конфигураций, необходимых для стабильной и правильной работы камеры. 

В etc можно найти файлы, отвечающие за загрузку операционной системы. Они же обеспечивают и работу стандартных служб. 

Init.t создана для содержания скриптов, влияющих на работу ОС. К слову о каталоге etc: в нем есть файл hosts, имеющий право на блокировку переадресации веб-адресов.

Для нормальной работы интернета на мобильном устройстве система должна получить максимум информации о точках доступа. В Android эта информация хранится в файле apns.conf, расположившемся в папке etc. Тут же есть и файл gps.conf. Как вы думаете, за что отвечает он? Разумеется, за навигацию по системе GPS. 

Ну а мы двигаемся дальше. В system содержится каталог fonts, в котором можно найти системные шрифты.

Папка framework продемонстрирует, какие “процессы” происходят внутри нашей операционной системы.

Каталог lib и подкаталог modules объясняют, какие библиотеки приложений и сервисов используются в системе, а также какие драйверы (заметьте, не модули!) для этого применяются.

Никогда не горел желанием послушать дополнительно системные звуки. Но такую возможность предоставляет каталог media. Загрузочная анимация хранится тут же, в архиве bootanimation.zip.

Мы уже начали разговаривать о мультимедиа-файлах. Тогда давайте разберемся, покончим с этим. Голосовые движки системы хранятся в каталоге tts.

Конечно же, системные настройки прописываются в отдельный файл. Его найти можно системно разделе. Он носит имя build.prop.

Теперь, когда с системным разделом разобрались, пойдем дальше. На очереди – раздел proc. Он может поведать классную историю о том, какое ядро работает в аппарате и какие настройки конфигурации оно имеет.

В раздел mnt операционная система всегда монтирует карты памяти, а также внутреннюю память. Отметим, что они имеют виртуальный характер.

Примерно этим же занимается и каталог storage. Однако если mnt производит операции с виртуальными составляющими, то storage монтирует только реальную память и реальные внешние накопители.

Как эта информация пригодится пользователям?

Опираясь на полученные ранее знания, мы уже можем совать свой в нос чужие (системные) дела. Причем делать это относительно безопасно, если не будем порываться удалить конфигурационные файлы. Я это к тому, что зная, например, для чего предназначен раздел data, мы можем отыскать необходимый файл того или иного приложения, чтобы что-то с ним сделать.

Где хранятся контакты на Android

Списки контактов можно назвать самыми чувствительными элементами на Android. Из-за какой-то системной оплошности их можно легко потерять. Поэтому стоит знать, где они хранятся, чтобы обезопасить себя от этой участи. Итак, приступим.

Чтобы найти контакты на Android, доктор прописал адрес: /data/data/com.android.providers.contacts/databases. Там ищем файл contacts.db. На некоторых версиях ОС он может называться contacts2.db. ВАЖНО: чтобы прочитать этот файл, потребуется наличие root-прав. По сути дела, contacts.db является базой данных. 

Где хранятся все файлы в андроид – описание местоположения всех важных файлов в системе

Источник: https://android4all.ru/faq/43-voprosy-po-sisteme-android/1974-android-chto-i-gde-khranitsya

Где лежат apk. Android: что и где хранится? Где хранятся контакты на Android

Приложения на Андроиде хранятся во внутренней памяти или на SD-карте. Но не все пользователи знают, как переносить их и где найти папку с программами при подключении к компьютеру.

Иногда необходимо узнать расположение игр на мобильных устройствах, ведь там лежат сохранения. Начиная с Андроида 2.2, пользователям стала доступна функция переноса приложений на SD-карту. Но на некоторых устройствах установка программ на внешний носитель запрещена. Это зависит как от операционной системы, так и от свойств устанавливаемого приложения.

Чтобы установить программу на SD-карту, нужно:

  1. Открыть настройки телефона и перейти к перечню приложений.
  2. Среди вкладок выбрать загруженные во внутреннюю память.
  3. Найти приложения, которые были установлены пользователем, а не разработчиком.
  4. По очереди перенести их на SD-карту, нажимая соответствующую клавишу.

Если кнопка для переноса недоступна, придётся воспользоваться внешними программами.

На Samsung

Чтобы обнаружить папку с приложениями, необходимо подключить устройство к компьютеру. Зайдите в проводник и найдите data.

Это главная папка пользователя, куда сохраняются установленные программы и их данные. Внутри лежит несколько меньших категорий, отвечающих за различные функции.

В app устанавливаются приложения, в data — персональная конфигурация системы, а в system — настройки операционной системы.

Отдельного внимания заслуживает dalvik-cache. В этой папке хранятся сервисы для корректного запуска и поддержки работы приложений. В некоторых устройствах также присутствует app-lib. Папка хранит библиотеки для работы определённых частей программного кода.

В какой папке находятся установленные приложения

На устройствах Android файлы располагаются по одинаковому принципу. Даже название папок, в большинстве случаев, идентично. Но разные типы файлов сортируют по соответствующим каталогам. Приложения сохраняются в android/app или data/app. Обе папки расположены в основной памяти устройства.

Внутри также находятся каталоги для хранения персональных настроек и кеша. Они соответственно называются data и obb. Большинство приложений использует только одну из этих папок для временной информации, но некоторые, особенно игры, задействуют обе.

Перенос приложений на карту памяти Android 7: пошагово

На устройствах, сделанных на базе Android, есть встроенная функция переноса информации между внешней и внутренней памятью. Чтобы перенести данные, необходимо:

  1. Зайти в настройки смартфона.
  2. Найти и открыть приложения.
  3. Выбрать, какую программу необходимо перенести.
  4. Открыть приложение.
  5. Нажать кнопку переноса на SD-карту.
  6. Согласиться с изменениями.
  7. Дождаться окончания процесса.

Где хранятся все файлы в андроид – описание местоположения всех важных файлов в системе

Общий принцип действий похож вне зависимости от версии операционной системы.

Почему приложения не устанавливаются на карту памяти Андроид

Причины возникновения проблемы зависят от версии операционной системы. Но решение неполадки в общем случае похоже.

На Андроиде четвёртой версии пользователь впервые получил возможность изменять настройки памяти: выбирать место сохранения файлов. Именно Android 4.0 позволил делать это без root. Для этого нужно зайти в параметры системы и перейти к разделу памяти. Откройте конфигурацию и укажите в качестве стандартного места установки приложений внешнюю карту.

Источник: https://gamevid.ru/obzory/gde-lezhat-apk-android-chto-i-gde-hranitsya-gde-hranyatsya-kontakty-na/

Хранение файлов

Файловая система Android очень похожа на файловые системы, основанные на дисках, используемые в других системах. В данном уроке рассказывается как работать с файловой системой Android, читать и записывать файлы, используя класс File.

Объект типа File отлично подходит для чтения и записи больших объемов данных, от начала до конца. Это могут быть например картинки или другие файлы, переданные по сети.

Сейчас мы рассмотрим выполнение базовых операций, связанных с использованием файлов в вашем приложении. Мы предполагаем, что вы уже знакомы с базовыми возможностями файловой системой Linux, а также с API ввода/вывода java.io

Выбор между внутренним и внешним хранилищем

Все устройства под Android имеют два пространства для хранения файлов: внешнее и внутреннее хранилища. Эти названия остались от первых устройств на Android.

На большинстве устройств применялась энергозависимая память (внутреннее хранилище) и съемные устройства, вроде microSD карт (внешнее хранилище). На некоторых устройствах постоянное место хранения делится между внутренним и внешним разделами, поэтому даже без SD карт у нас будет и “внутреннее” и “внешнее” пространство.

При этом для API неважно располагается ли внешнее пространство на съемном устройстве или нет. В списке приведены общие факты об обоих типах пространства:

  • Внутреннее хранилище:
  • Всегда доступно.
  • По умолчанию доступ к файлам разрешен только для приложений, создавших эти файлы.
  • При удалении приложения, из внутреннего хранилища удаляются все файлы приложения.
  • Внутреннее хранилище лучше подходит, если вы хотите быть уверены, что другие приложения не получат доступ к данным.
  • Внешнее хранилище:
  • Не всегда доступно, поскольку пользователь может вытащить съемную память из устройства.
  • Файлы могут быть прочитаны любым приложением.
  • При удалении приложения файлы будут удалены только в том случае, если вы сохранили их в директории, полученной с помощью метода getExternalFilesDir().
  • Внешнее хранилище – это отличное место для файлов, которые не нуждаются в особой секретности. Также во внешних хранилищах могут храниться файлы, которые могут быть открыты на компьютере пользователя или те, которые вы хотите использовать сразу в нескольких приложениях.

Совет: хотя приложения устанавливаются по умолчанию во внутреннее хранилище, вы можете задать место хранения с помощью атрибута android:installLocation в файле манифеста.

Пользователям понравится, что вы позаботились о них и установили эту опцию, в случаях, когда размер файла APK вашего приложения будет больше свободного пространства их внутреннего хранилища.

Больше информации о данной опции смотрите в разделе Место установки приложения.

Получение прав для внешнего хранилища

Для записи во внешнее хранилище, вы должны запросить права WRITE_EXTERNAL_STORAGE в файле манифеста:

Внимание:в настоящее время, все приложения имеют права на чтение файлов из внешнего хранилища без получения специального разрешения. Однако это изменится в будущих версиях.

Если ваше приложение должно читать файлы из внешнего хранилища (но не писать), необходимо получить право READ_EXTERNAL_STORAGE.

Чтобы гарантировать, что ваше приложение всегда будет работать так, как вы ожидаете, объявляйте права на чтение уже сейчас, чтобы не беспокоиться об этом в будущем:

Однако если ваше приложение использует право на запись WRITE_EXTERNAL_STORAGE, права на чтение будут неявно заданы.

Вам не нужно получать какие-либо дополнительные разрешения для сохранения файлов во внутреннем хранилище. Приложения всегда имеют права на запись и чтение из директорий внутреннего хранилища.

Сохранение файлов во внутреннем хранилище

При сохранении файлов во внутреннем хранилище, можно получить соответствующую директорию как объект типа File, вызвав один из методов:

getFilesDir() Возвращает объект типа File представляющий директорию внутреннего хранилища для вашего приложения. getCacheDir() Возвращает объект типа File представляющий директорию внутреннего хранилища для хранения временных кэш файлов. Обязательно удаляйте все файлы, как только вы перестаете в них нуждаться и установите разумное ограничение на количество памяти, которое вы используете в определенный момент времени, например 1Мб. Если в системе останется мало места для хранения, она может удалить ваши временные файлы без предупреждения.

Чтобы создать новый файл в одной из директорий, вы можете использовать конструктор File(), передав в него объект типа File, полученный с помощью соответствующего метода:

Читайте также:  Топ-6 приложений на iphone для прослушивания аудиокниг

File file = new File(context.getFilesDir(), filename);

File file = new File(context.getFilesDir(), filename);

Можно также использовать метод openFileOutput() для получения объекта FileOutputStream, который записывает файл во внутренний каталог. Пример записи некоторого текста в файл:

String filename = «myfile»;
String string = «Hello world!»;
FileOutputStream outputStream;

try {
outputStream = openFileOutput(filename, Context.MODE_PRIVATE);
outputStream.write(string.getBytes());
outputStream.close();
} catch (Exception e) {
e.printStackTrace();
}

String filename = «myfile»;String string = «Hello world!»;FileOutputStream outputStream;  outputStream = openFileOutput(filename, Context.MODE_PRIVATE);  outputStream.write(string.getBytes());

Или если необходимо создать временный файл, используйте createTempFile(). В следующем примере метод получает имя файла из URL и создает файл с указанным именем во внутренней временной директории:

public File getTempFile(Context context, String url) {
File file;
try {
String fileName = Uri.parse(url).getLastPathSegment();
file = File.createTempFile(fileName, null, context.getCacheDir());
catch (IOException e) {
// Ошибка при создании файла
}
return file;
}

public File getTempFile(Context context, String url) {        String fileName = Uri.parse(url).getLastPathSegment();        file = File.createTempFile(fileName, null, context.getCacheDir());        // Ошибка при создании файла

Примечание:расположение каталога внутреннего хранилища вашего приложения в файловой системе Android зависит от имени пакета. Технически, другое приложение может прочитать ваши внутренние файлы, если вы установите режим доступа для чтения.

Однако другому приложению понадобится также знать название пакета вашего приложения и имя самого файла. Другие приложения не могут просматривать содержимое внутреннего хранилища и не имеют права чтения и записи, пока явно не указано что файл может быть прочитан или записан.

Так что пока вы используете флаг MODE_PRIVATE для ваших файлов во внутреннем хранилище, они будут недоступны для других приложений.

Сохранение файлов во внешнем хранилище

Поскольку внешнее хранилище может быть недоступно – например при подключении устройства к компьютеру или при удалении SD карты, вы должны всегда проверять раздел на доступность, прежде чем попытаться его использовать.

Вы можете запросить состояние внешнего хранилища с помощью метода getExternalStorageState(). Если метод вернул состояние, равное MEDIA_MOUNTED, вы можете читать и записывать ваши файлы.

Пример метода проверки внешнего хранилища на доступность:

/* Проверяем хранилище на доступность чтения и записи*/
public boolean isExternalStorageWritable() {
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state)) {
return true;
}
return false;
}

/* Проверяем внешнее хранилище на доступность чтения */
public boolean isExternalStorageReadable() {
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state) ||
Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
return true;
}
return false;
}

/* Проверяем хранилище на доступность чтения и записи*/public boolean isExternalStorageWritable() {    String state = Environment.getExternalStorageState();    if (Environment.MEDIA_MOUNTED.equals(state)) {/* Проверяем внешнее хранилище на доступность чтения */public boolean isExternalStorageReadable() {    String state = Environment.getExternalStorageState();    if (Environment.MEDIA_MOUNTED.equals(state) ||        Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {

Хотя содержимое внешнего хранилища может быть изменено пользователем или другим приложением, есть две категории файлов, которые вы можете в нем хранить:

Публичные файлы Файлы, которые должны быть доступны другим приложениям и пользователям. После удаления приложения эти файлы должны оставаться доступными пользователю. Это, например, фотографии, сделанные в вашем приложении, или скачанные файлы. Приватные файлы Файлы, по праву принадлежащие приложению, которые должны быть удалены вместе с приложением. Хотя эти файлы технически доступны для пользователя и других приложений, поскольку они находятся во внешнем хранилище, реально они не предоставляют свои данные за пределами приложения. При удалении приложения, все такие файлы будут также удалены. Это, к примеру, временные медиа-файлы.

Если вы хотите сохранить публичные файлы по внешнем хранилище, используйте метод getExternalStoragePublicDirectory() для получения объекта типа File соответствующего каталогу.

В качестве аргумента метод принимает тип файла, который вы хотите сохранить, логически он может быть организован с другими публичными файлами, например каталоги музыки (DIRECTORY_MUSIC) или картинок (DIRECTORY_PICTURE). Например:

public File getAlbumStorageDir(String albumName) {
// Получение публичного каталога картинок
File file = new File(Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_PICTURES), albumName);
if (!file.mkdirs()) {
Log.e(LOG_TAG, «Directory not created»);
}
return file;
}

public File getAlbumStorageDir(String albumName) {    // Получение публичного каталога картинок    File file = new File(Environment.getExternalStoragePublicDirectory(            Environment.DIRECTORY_PICTURES), albumName);        Log.e(LOG_TAG, «Directory not created»);

Если вы хотите сохранить приватный файл приложения, воспользуйтесь методом < href="developer.android.com/reference/android/content/Context.html#getExternalFilesDir(java.lang.

String)» rel='nofollow'>getExternalFilesDir() и передайте имя типа директории.

Каждая созданная таким образом директория добавляется к корневой директории вашего приложения и собирает в себе все внешние файлы, которые будут удалены вместе с приложением.

Пример создания директории собственного фотоальбома:

public File getAlbumStorageDir(Context context, String albumName) {
// Получение приватной директории для фотоальбома приложения
File file = new File(context.getExternalFilesDir(
Environment.DIRECTORY_PICTURES), albumName);
if (!file.mkdirs()) {
Log.e(LOG_TAG, «Directory not created»);
}
return file;
}

public File getAlbumStorageDir(Context context, String albumName) {    // Получение приватной директории для фотоальбома приложения    File file = new File(context.getExternalFilesDir(            Environment.DIRECTORY_PICTURES), albumName);        Log.e(LOG_TAG, «Directory not created»);

Если ни одно из предопределенных имен каталогов не подходит, вы можете в метод getExternalFilesDir() передать null. Метод возвратит корневой приватный каталог вашего приложения, расположенный во внешнем хранилище.

Помните, что getExternalFilesDir() создает каталоги внутри директории, которая будет удалена вместе с приложением. Если файлы должны быть доступны после удаления приложения, например снимки с камеры, используйте метод getExternalStoragePublicDirectory().

Очень важно использовать имена директорий, представленных константами API, такие как DIRECTORY_PICTURES независимо от того, использовался ли метод getExternalFilesDir() или getExternalStoragePublicDirectory().

Предопределенные имена директорий позволяют системе правильно обрабатывать ваши файлы.

Например, файлы сохраненные в директории DIRECTORY_RINGTONES будут помечены системным медиа-сканером как мелодии звонка, а не как музыкальные файлы.

Запрос свободного пространства

Если вы заранее знаете как много данных вам надо сохранить, вы можете узнать достаточно ли места, не дожидаясь исключения IOException, с помощью методов getFreeSpace() или getTotalSpace().

Данные методы позволяют узнать количество свободного и общего пространства на разделе хранилища, соответственно.

Данная информация также полезна, чтобы избежать заполнения раздела хранилища выше определенного порога.

Однако система не гарантирует, что вы можете записать столько же, сколько показывает метод getFreeSpace(). Если свободного места немного больше, чем вы хотите сохранить, или если файловая система заполнена меньше, чем на 90%, вероятно можете продолжать, иначе лучше воздержаться.

Примечание: вам не обязательно проверять количество свободного места перед записью вашего файла. Вы можете попробовать записать файл и обработать исключение IOException. Вы также можете не знать точно сколько места вам нужно. Например, если вы меняете кодировку файла перед сохранением, например конвертируете PNG в JPEG, вы можете не знать конечного размера файла.

Удаление файла

Всегда удаляйте файлы, если они больше не используются. Самый простой способ удалить открытый файл – вызвать для него метод delete():

Если файл сохранен во внешнем хранилище, вы можете запросить Контекст найти и удалить файл, используя метод deleteFile():

myContext.deleteFile(fileName);

myContext.deleteFile(fileName);

Примечание:При удалении приложения, система удаляет следующие файлы:

  • Файлы, сохраненные во внутреннем хранилище
  • Файлы внешнего хранилища, сохраненные с использованием метода getExternalFilesDir()

Однако необходимо регулярно удалять вручную все временные файлы, созданные с помощью getCacheDir() и другие файлы, которые больше не нужны.

Источник: http://easyandroid.ru/index.php?p=308

Хранение данных в Android

В прошлом своем посте я писал о создании всплывающих менюшек, сегодня же мы поговорим о более важной теме такой, как хранение данных. В android есть несколько способов хранения данных: общие настройки, бд и тд. В этом посте я расскажу о том как хранить данные в БД. В качестве БД android использует встраиваемую SQLite.

SQLite очень быстрая база, поэтому ее использование на мобильной платформе не приводит к резкому уменьшению производительности. Перейдем к описанию кода. Гугл позаботился о наших нервах и написал небольшой класс утилиту SQLiteOpenHelper.

public class DbOpenHelper extends SQLiteOpenHelper{

  private static final int DB_VERSION = 1;

  private static final String DB_NAME = «test»;

  public static final String TABLE_NAME = «users»;

  public static final String LOGIN = «login»;   public static final String PASSW = «passw»;   private static final String CREATE_TABLE = «create table » + TABLE_NAME + » ( _id integer primary key autoincrement, »       + LOGIN + » TEXT, » + PASSW + » TEXT)»;

  public DbOpenHelper(Context context) {

    super(context, DB_NAME, null,DB_VERSION);   }   @Override

  •   public void onCreate(SQLiteDatabase sqLiteDatabase) {
  •   public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
  • }

    sqLiteDatabase.execSQL(CREATE_TABLE);   }   @Override   }

* This source code was highlighted with Source Code Highlighter.

При создании экземпляра класса DbOpenHelper будет проверено, существует ли база с именем test, если существует, то будет вызван метод onUpgrade, если нет то onCreate в котором мы создаем таблицу users(обычно в этом методе создают таблицы и инициализируют их значениями по умолчанию). У класса SQLiteOpenHelper есть методы getReadableDatabase и getWritableDatabase, которые возвращают экземпляр класса SQLiteDatabase. С помощью этого экземпляра мы и будет работать с БД. У него есть все нужные нам методы: insert, update, query, delete и тд. Напишем небольшое приложение сохраняющее логин и пароль в базу public class TestActivity extends Activity {

  EditText loginEditText = null;

  EditText passEditText = null;   Button saveButton = null;   @Override

  public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);     setContentView(R.layout.main);     loginEditText = (EditText) findViewById(R.id.login);     passEditText = (EditText) findViewById(R.id.passw);     saveButton = (Button) findViewById(R.id.btn1);

    saveButton.setOnClickListener(new View.OnClickListener() {

      public void onClick(View view) {         DbOpenHelper dbOpenHelper = new DbOpenHelper(TestActivity.this);         SQLiteDatabase db = dbOpenHelper.getWritableDatabase();

        ContentValues cv = new ContentValues();

        cv.put(DbOpenHelper.LOGIN,loginEditText.getText().toString());         cv.put(DbOpenHelper.PASSW,passEditText.getText().toString());

        db.insert(DbOpenHelper.TABLE_NAME,null,cv);

        db.close();

        loginEditText.setText(«»);

        passEditText.setText(«»);       }     });   }

}

* This source code was highlighted with Source Code Highlighter.

В примере у нас есть окно в котором два поля ввода и кнопка, а по нажатию кнопки происходит сохранение. Вначале мы создаем экземляр класса DbOpenHelper, который создает саму базу и таблицы. Затем получаем объект SQLiteDatabase, методом insert которого будет происходить запись. ContentValues это некая обертка над данными, которые будут записаны в бд. В методе put первым аргументом является имя столбца, а вторым сами данные которые будут записаны в столбец, на языке SQL это выглядит так:

INSERT INTO users ( 'login','passw') VALUES ('somelogin','somepass')

В качестве домашнего задания, попробуйте доставать из бд данные и отображать их на экране.

Исходники проекта можно скачать тут.

Отвечу на вопросы в комментах.

P.S. Оригинал в моем блоге

Источник: https://habr.com/post/104038/

Сохранение файлов

Android использует файловую систему, похожую на систему на основе дисковых файловых систем на других платформах. Этот урок описывает, как работать с файловой системой Android, чтобы читать и записывать файлы, используя File API.

File объект подходит для чтения или записи больших объемов данных с начала до конца, не пропуская ничего вокруг. Например, это хорошо подходит для файлов изображений или для обмена чем-нибудь по сети.

Этот урок показывает, как выполнять основные задачи связанные с файлами в вашем приложении. Урок предполагает, что вы знакомы с основами файловой системы Linux и стандартным API файлового ввода/вывода в java.io.

[wpanchor id=»1″]

Выберите внутреннее или внешнее хранилище

Все Android устройства имеют две области хранения файлов: «внутреннее» и «внешнее» хранилище.

Эти названия пришли из первых дней Android, когда предлагалось, что большинство устройств предоставляют встроенную постоянную неизменную память (внутреннее хранилище), а также съемный носитель, такое как микро SD карта(внешнее хранилище).

Некоторые устройства делят места постоянного хранения на «внутренние» и «внешние» разделы, т.е. даже без съемного носителя, всегда есть два хранилища, и поведение API для внешнего хранилища такое же, не зависимо от того, является ли оно съемным или нет. Следующие списки обобщают факты о каждом хранилище.

Внутреннее хранилище:

  • Всегда доступно.
  • Файлы, сохраненные здесь, по умолчанию, доступны лишь вашему приложению.
  • Когда пользователь удаляет ваше приложение, система удаляет все файлы вашего приложения из внутренней памяти.

Внутреннее хранилище лучше, когда вы хотите быть уверены, что ни пользователь, ни другие приложения не могут получить доступ к файлам.

Внешнее хранилище:

  • Не всегда доступно, так как пользователь может смонтировать внешний накопитель в качестве USB хранилища, и в некоторых случаях вынуть его из устройства.
  • Чтение разрешено всем, поэтому файлы, сохраненные здесь, можно прочитать без вашего контроля.
  • Когда пользователь удаляет ваше приложение, система удаляет файлы вашего приложения отсюда, только если вы сохраните их в каталоге изgetExternalFilesDir().
Читайте также:  Программы для работы с сетью wi-fi для android телефона – обзор лучших

Внешние накопители лучшее место для файлов, которые не требуют ограничения доступа, и для файлов, которыми вы хотите поделиться с другими приложениями, или хотите позволить пользователю получить доступ к ним на компьютере.

Полезный совет: Хотя приложения устанавливаются во внутреннее хранилище по умолчанию, можно указать android:installLocation атрибут в манифесте, чтобы ваше приложение могло быть установлено на внешний накопитель. Пользователи ценят эту опцию, когда размер APK очень большой, и у них есть внешнее пространство для хранения, превышающее внутреннюю память. Для получения дополнительной информации, см. Путь установки приложения.

[wpanchor id=»2″]

Получите разрешения для внешних накопителей

Для записи на внешний накопитель, вы должны запросить WRITE_EXTERNAL_STORAGE разрешение в вашем файле манифеста:

   
    …

Внимание: В настоящее время, все приложения имеют возможность читать с внешних накопителей без специального разрешения. Тем не менее, это изменится в будущем релизе.

Если ваше приложение должно прочитать внешний накопитель (но не писать в него), то вам нужно будет объявить READ_EXTERNAL_STORAGE разрешение.

Чтобы убедиться, что ваше приложение продолжало работать, как и ожидалось, вы должны объявить это разрешение сейчас, прежде чем изменения вступят в силу.

   
    …

Однако, если ваше приложение использует WRITE_EXTERNAL_STORAGE разрешение, то также неявно имеет разрешение на чтение внешнего хранилища.

Вам не нужно никаких разрешений для сохранения файлов во внутреннее хранилище. Ваше приложение всегда имеет разрешение на чтение и запись файлов в каталоге внутреннего хранилища.

[wpanchor id=»3″]

Сохраните файл во внутреннем хранилище

При сохранении файла во внутреннее хранилище, вы можете запросить соответствующий каталог, в виде объекта File , вызвав один из двух методов:

getFilesDir()
Возвращает File представляющий собой внутренний каталог вашего приложения.
getCacheDir()
Возвращает File представляющий собой внутренний каталог для временных файлов кэша вашего приложения. Будьте уверены, удалять файлы по одному больше не нужено, и реализуйте разумный предел размера объема памяти, который вы будете использовать в какой-либо момент времени, например, 1 Мб. Если в системе возникает нехватка места, она может удалить ваши файлы кэша без предупреждения.

Чтобы создать новый файл в одном из этих каталогов, вы можете использовать File()конструктор, передав File предоставленный одним из выше указанных методов, который указывает на ваш внутренний каталог. Например:

File file = new File(context.getFilesDir(), filename);

File file = new File(context.getFilesDir(), filename);

В качестве альтернативы, вы можете вызвать openFileOutput() для получения FileOutputStream , который пишет в файл в вашем внутреннем каталоге. Например, вот как записать текст в файл:

String filename = «myfile»;
String string = «Hello world!»;
FileOutputStream outputStream;

try {
  outputStream = openFileOutput(filename, Context.MODE_PRIVATE);
  outputStream.write(string.getBytes());
  outputStream.close();
} catch (Exception e) {
  e.printStackTrace();
}

String filename = «myfile»;String string = «Hello world!»;FileOutputStream outputStream;  outputStream = openFileOutput(filename, Context.MODE_PRIVATE);  outputStream.write(string.getBytes());

Или, если вам нужно кэшировать некоторые файлы, то следует использовать createTempFile(). Например, следующий метод извлекает имя файла из URL и создает файл с таким же именем во внутренней каталоге кэша вашего приложения:

public File getTempFile(Context context, String url) {
    File file;
    try {
        String fileName = Uri.parse(url).getLastPathSegment();
        file = File.createTempFile(fileName, null, context.getCacheDir());
    catch (IOException e) {
        // Error while creating file
    }
    return file;
}

public File getTempFile(Context context, String url) {        String fileName = Uri.parse(url).getLastPathSegment();        file = File.createTempFile(fileName, null, context.getCacheDir());        // Error while creating file

Примечание: Каталог внутреннего хранилища вашего приложения использует имя пакета вашего приложения, располагаясь в специальном месте файловой системы Android. Технически, другое приложение может читать ваши внутренние файлы, если вы установите для файла режим доступа на чтение.

Тем не менее, другие приложения также должны знать ваше имя пакета и имена файлов. Другие приложения не могут просматривать ваши внутренние каталоги, и не имеют доступа для чтения или записи, если явно не установить разрешения для чтения или записи.

Так что, пока вы используете MODE_PRIVATE для ваших файлов во внутренней памяти, они не являются доступными для других приложений.

[wpanchor id=»4″]

Сохраните файл на внешнем накопителе

Поскольку внешнее хранилище может быть недоступно — например, когда пользователь монтируется хранилище к ПК, или вынул SD карту, которая обеспечивает внешнее хранилище — вы всегда должны убедиться, что раздел доступен перед доступом к нему. Вы можете запросить состояния внешнего хранилища, вызвав getExternalStorageState(). Если возвращенное состояние равно MEDIA_MOUNTED, то вы можете читать и писать файлы. Например, следующие методы полезны для определения доступности хранилища:

/* Checks if external storage is available for read and write */
public boolean isExternalStorageWritable() {
    String state = Environment.getExternalStorageState();
    if (Environment.MEDIA_MOUNTED.equals(state)) {
        return true;
    }
    return false;
}

/* Checks if external storage is available to at least read */
public boolean isExternalStorageReadable() {
    String state = Environment.getExternalStorageState();
    if (Environment.MEDIA_MOUNTED.equals(state) ||
        Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
        return true;
    }
    return false;
}

/* Checks if external storage is available for read and write */public boolean isExternalStorageWritable() {    String state = Environment.getExternalStorageState();    if (Environment.MEDIA_MOUNTED.equals(state)) {/* Checks if external storage is available to at least read */public boolean isExternalStorageReadable() {    String state = Environment.getExternalStorageState();    if (Environment.MEDIA_MOUNTED.equals(state) ||        Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {

Хотя внешнее запоминающее устройство может изменяться пользователем и другими приложениями, есть две категории файлов, которые вы могли бы сохранить здесь:

Общедоступные файлы
Файлы, которые должны быть в свободном доступе для других приложений и для пользователя. Когда пользователь удаляет ваше приложение, эти файлы должны оставаться доступными для пользователя.Например, фотографии, сделанные с помощью приложения, или другие загруженные файлы.
Личные файлы
Файлы, которые по праву принадлежат вашему приложению, и их следует удалить, когда пользователь удаляет ваше приложение. Хотя эти файлы являются технически доступными пользователю, и другим приложениям, т.к. они находятся на внешнем накопителе, это файлы, которые реально не представляют собой ценности для пользователя вне вашего приложения. Когда пользователь удаляет ваше приложение, система удаляет все файлы с внешнего приватного каталога вашего приложения.Например, дополнительные ресурсы загруженные вашим приложения или временные медиа-файлы.

Если вы хотите сохранить общедоступные файлы на внешнем устройстве хранения, используйтеgetExternalStoragePublicDirectory() метод для получения File представляющего соответствующий каталог на внешнем накопителе.

Метод принимает аргумент, указывающий тип файла, который вы хотите сохранить, чтобы они могли быть логически организованы с другими общедоступными файлами, такими как DIRECTORY_MUSIC или DIRECTORY_PICTURES.

Например:

public File getAlbumStorageDir(String albumName) {
    // Get the directory for the user's public pictures directory.
    File file = new File(Environment.getExternalStoragePublicDirectory(
            Environment.DIRECTORY_PICTURES), albumName);
    if (!file.mkdirs()) {
        Log.e(LOG_TAG, «Directory not created»);
    }
    return file;
}

public File getAlbumStorageDir(String albumName) {    // Get the directory for the user's public pictures directory.     File file = new File(Environment.getExternalStoragePublicDirectory(            Environment.DIRECTORY_PICTURES), albumName);        Log.e(LOG_TAG, «Directory not created»);

Если вы хотите сохранять файлы, которые являются приватными для вашего приложения, вы можете запросить соответствующий каталог, вызвав getExternalFilesDir() и передать ему имя, указывающее тип необходимого каталога.

Каждый каталог, созданный таким способом, добавляется в родительский каталог, который инкапсулирует все файлы внешнего хранилища вашего приложения, которые система удаляет, когда пользователь удаляет ваше приложение.

Например, вот метод, который можно использовать для создания каталога отдельного фотоальбома:

public File getAlbumStorageDir(Context context, String albumName) {
    // Get the directory for the app's private pictures directory.
    File file = new File(context.getExternalFilesDir(
            Environment.DIRECTORY_PICTURES), albumName);
    if (!file.mkdirs()) {
        Log.e(LOG_TAG, «Directory not created»);
    }
    return file;
}

public File getAlbumStorageDir(Context context, String albumName) {    // Get the directory for the app's private pictures directory.     File file = new File(context.getExternalFilesDir(            Environment.DIRECTORY_PICTURES), albumName);        Log.e(LOG_TAG, «Directory not created»);

Если ни одно из предопределенных имен подкаталогов не удовлетворяет вашим файлам, вы можете вместо этого вызвать getExternalFilesDir() и передать null. При это возвращается корневой каталог для приватных каталогов вашего приложения на внешнем накопителе.

Помните, что getExternalFilesDir() создает каталог внутри каталога, который удаляется, когда пользователь удаляет ваше приложение.

Если сохраненные файлы должны оставаться доступными после того как пользователь удаляет ваше приложение — например, когда ваше приложение представляет собой камеру, и пользователь захочет сохранить фотографии — то следует использовать getExternalStoragePublicDirectory().

Независимо от того, используете ли вы getExternalStoragePublicDirectory() для файлов, которые являются общими или getExternalFilesDir() для файлов, которые являются приватными для вашего приложения, важно, что вы используете имена каталогов, предоставляемые константами API, такими как DIRECTORY_PICTURES. Эти имена каталогов гарантируют, что файлы будут интерпретироваться системой должным образом. Например, файлы, сохраненные вDIRECTORY_RINGTONES классифицируются по системе медиа сканера как мелодии звонка вместо музыки.

[wpanchor id=»5″]

Запросите свободное пространство

Если вы знаете заранее, сколько данных вы будете сохранять, вы можете выяснить, есть ли в наличие достаточно места, не вызывая IOException с помощью вызова getFreeSpace() илиgetTotalSpace().

Эти методы предоставляют информацию о текущем доступном пространстве и общем пространстве раздела, соответственно.

Эта информация также полезна, чтобы избежать заполнения раздела накопителя выше определенного порога.

Тем не менее, система не гарантирует, что вы можете записать столько байт, сколько обозначеноgetFreeSpace(). Если возвращаемое число на несколько МБ больше, чем размер данных, которые вы хотите сохранить, или если файловая система заполнена меньше чем на 90%, то, наверное, можно продолжить. В противном случае, вероятно, не стоит записывать в хранилище.

Примечание: Вы не обязаны проверять количество свободного места, прежде чем вы сохраняете файл. Вместо этого, вы можете попробовать записать файл, и поймать IOExceptionесли оно произойдет.

Возможно, вам придется сделать так, если вы не знаете точно, сколько места нужно.

Например, если вы измените кодировку файла перед сохранением путем преобразования PNG изображения в JPEG, вы не будете знать размер файла заранее.

[wpanchor id=»6″]

Удаление файла

Вы всегда должны удалить файлы, которые вам больше не нужны. Самый простой способ удалить файл это вызвать delete().

Если файл сохранен во внутреннем хранилище, вы также можете попросить Context найти и удалить файл, вызвав deleteFile():

myContext.deleteFile(fileName);

myContext.deleteFile(fileName);

Примечание: Когда пользователь удаляет ваше приложение, Android система удаляет следующее:

  • Все файлы, сохраненные во внутреннем хранилище
  • Все файлы, сохраненные на внешнем накопителе, используя getExternalFilesDir().

Тем не менее, вы должны вручную удалить все файлы из кэша, созданные с помощьюgetCacheDir() на регулярной основе, а также регулярно удалять другие файлы, которые вам больше не нужны.

Источник: https://www.fandroid.info/sohranenie-fajlov/

Ссылка на основную публикацию