Сохранение извлечение данных из файла android. Сохранение файлов

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

Операции вводавывода в Android аналогичны операциям в стандартных Java-программах. Android реализует потоки с помощью иерархии классов, определенных в пакете java.io . Кроме этих классов в пакете java.io определено множество специализированных классов для операций ввода вывода.

Чтобы прочитать данные из файла, необходимо вызвать метод Context.openFileinput() и передать в качестве параметра имя файла. Метод возвращает стандартный Java-объект Fileinputstream . Например, код для чтения данных из текстового файла может выглядеть так:

InputStream inStream openFiieinput(file.txt); InputStreamReader sr = new InputStreamReader(inStream); // создаем буфер для чтения файла BufferedReader reader new BufferedReader(sr); String str; StringBuffer buffer new StringBuffer(); // читаем данные в буфер while ((str reader.readLine()) null) buffer.append(str + "\n"); inStream.close();

Чтобы записывать в файл, необходимо вызвать метод context.openFileOutput() , передав ему имя файла как параметр. Этот метод возвращает объект FileOutputstream . Вызов этих методов для данного файла из другого приложения не будет работать, обратиться вы можете только к своим файлам. Пример записи строки данных в файл file.txt может быть следующим:

String data; OutputStream outStream = openFileOutput(file.txt, 0); OutputStreamWriter sw new OutputStreamWriter(outStream); sw.write (data); sw.close();

Если имеется статический файл, который надо упаковать с вашим приложением во время компиляции проекта, можно сохранить его в каталоге проекта в папке res/raw/ , а затем открыть его методом Resources.openRawResource() . Он возвращает объект Inputstrearn , который можно использовать для чтения файла. После окончания работы с потоком не забудьте его закрыть, вызвав метод close() .

Обрагиге внимание: Методы openFilelnput() и openFileOutput() не принимают полного пути к файлу (например, path/files/file.txt ), только простые имена файла.

В качестве примера приложения, записывающего и читающего данные из файлов, создадим простейший текстовый редактор с виджетом EditText и меню для открытия файла и сохранения его после редактирования. Создайте в Eclipse новый проект, заполнив поля в окне New Android Project :

  • Project name - ContactEditor;
  • Application name - ReadWrite File Sample;
  • Package name - com.samples.filesrw;
  • Create Activity - EditorActivity.

Код XMLсхемы разметки main.xml, в которой находится единственный элемент EditText:

Файл разметки main.xml

В классе деятельности приложения EditorActivity определим меню из трех пунктов- Open, Save и Exit. Во внутренних методах openFile() и saveFile() реализуем операции по открытию и сохранению файла, приведенные ранее.

Файл класса деятельности EditorActivity.java

Package com.samples.filesrw; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.widget.EditText; import android.widget.Toast; public class EditorActivity extends Activity { public static final int IDM_OPEN = 101; public static final int IDM_SAVE = 102; public static final int IDM_EXIT = 103; private final static String FILENAME = "file.txt"; private EditText mEdit; @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.main); mEdit = (EditText)findViewById(R.id.edit); } @Override public boolean onCreateOptionsMenu(Menu menu) { menu.add(Menu.NONE, IDM_OPEN, Menu.NONE, "Open") .setIcon(R.drawable.ic_menu_open) .setAlphabeticShortcut("o"); menu.add(Menu.NONE, IDM_SAVE, Menu.NONE, "Save") .setIcon(R.drawable.ic_menu_save) .setAlphabeticShortcut("s"); menu.add(Menu.NONE, IDM_EXIT, Menu.NONE, "Exit") .setIcon(R.drawable.ic_menu_exit) .setAlphabeticShortcut("x"); return(super.onCreateOptionsMenu(menu)); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case IDM_OPEN: openFile(FILENAME); break; case IDM_SAVE: saveFile(FILENAME); break; case IDM_EXIT: finish(); break; default: return false; } return true; } private void openFile(String fileName) { try { InputStream inStream = openFileInput(FILENAME); if (inStream != null) { InputStreamReader tmp = new InputStreamReader(inStream); BufferedReader reader = new BufferedReader(tmp); String str; StringBuffer buffer = new StringBuffer(); while ((str = reader.readLine()) != null) { buffer.append(str + "\n"); } inStream.close(); mEdit.setText(buffer.toString()); } } catch (Throwable t) { Toast.makeText(getApplicationContext(), "Exception: " + t.toString(), Toast.LENGTH_LONG) .show(); } } private void saveFile(String FileName) { try { OutputStreamWriter outStream = new OutputStreamWriter(openFileOutput(FILENAME, 0)); outStream.write(mEdit.getText().toString()); outStream.close(); } catch (Throwable t) { Toast.makeText(getApplicationContext(), "Exception: " + t.toString(), Toast.LENGTH_LONG) .show(); } } }

Текстовый редактор с возможностью сохранения содержимого в файле

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

Часто пользователи смартфонов на операционной системе Android делают для себя некоторое открытие – в отличие от смартфонов на Symbian или Windows в стандартном ПО установленном на девайсе отсутствует диспетчер файлов.Что делает невозможным просмотр, копирование, перемещение и удаление файлов или программ.

Работать с файлами на андроид достаточно просто – необходимо зайти магазин приложений и выбрать понравившийся по функциям файловый менеджер. Для каждой версии Android в маркета представлены десятки приложений открывающих доступ к файлам, хранящимся на устройстве или карте-памяти. Выбрать программу достаточно просто – прочитайте отзывы о программах, как правило, они достоверны и помогут сделать выбор в пользу того или иного приложения.
Самыми популярными файловыми менеджерами для Android ОС являются — Tоtаl Commаnder, известный нам еще поры расцвета Windows 93, ES Проводник, позволяющий подключать для хранения файлов сетевые хранилища вроде Dropboxи Astro, несколько достающий своей рекламой. Найти и установить их на устройство интуитивно просто.

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

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

Стоит учесть, что для создания учетной записи вам необходимо создать почтовый ящик на Google и провести его активацию. Для совершения покупок в магазине вам потребуется привязать к своей учетке действующую банковскую карту. Если вы не имеете банковской карточки, то отличный выход из положения создать виртуальную карту от QIWI-сервиса. Подробнее почитать об условиях вы можете на сайте QIWI.

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

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

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

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

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

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

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

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

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

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

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

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

...

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

...

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

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

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

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

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

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

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(); }

Или, если вам нужно кэшировать некоторые файлы, то следует использовать 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; }

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

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

Поскольку внешнее хранилище может быть недоступно - например, когда пользователь монтируется хранилище к ПК, или вынул 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; }

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

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

Если вы хотите сохранить общедоступные файлы на внешнем устройстве хранения, используйте метод для получения 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; }

Если вы хотите сохранять файлы, которые являются приватными для вашего приложения, вы можете запросить соответствующий каталог, вызвав 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; }

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

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

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

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

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

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

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

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

MyFile.delete();

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

MyContext.deleteFile(fileName);

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

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

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

Android uses a file system that"s similar to disk-based file systems on other platforms. This page describes how to work with the Android file system to read and write files with the APIs.

Choose internal or external storage

All Android devices have two file storage areas: "internal" and "external" storage. These names come from the early days of Android, when most devices offered built-in non-volatile memory (internal storage), plus a removable storage medium such as a micro SD card (external storage). Many devices now divide the permanent storage space into separate "internal" and "external" partitions. So even without a removable storage medium, these two storage spaces always exist, and the API behavior is the same regardless of whether the external storage is removable.

Because the external storage might be removable, there are some differences between these two options as follows.

Tip: Although apps are installed onto the internal storage by default, you can allow your app to be installed on external storage by specifying the attribute in your manifest. Users appreciate this option when the APK size is very large and they have an external storage space that"s larger than the internal storage. For more information, see .

Save a file on internal storage

Your app"s internal storage directory is specified by your app"s package name in a special location of the Android file system that can be accessed with the following APIs.

On Android 6.0 (API level 23) and lower, other apps can read your internal files if you set the file mode to be world readable. However, the other app must know your app package name and file names. Other apps cannot browse your internal directories and do not have read or write access unless you explicitly set the files to be readable or writable. So as long as you use for your files on the internal storage, they are never accessible to other apps.

Write a cache file

If you instead need to cache some files, you should use . For example, the following method extracts the file name from a and creates a file with that name in your app"s internal cache directory:

Kotlin

private fun getTempFile(context: Context, url: String): File? = Uri.parse(url)?.lastPathSegment?.let { filename -> File.createTempFile(filename, null, context.cacheDir) }

Java

private 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; }

Tip: If you need to package a file in your app that is accessible at install time, save the file in your project"s res/raw/ directory. You can open these files with , passing the R.raw. filename resource ID. This method returns an that you can use to read the file. You cannot write to the original file.

Open a directory

You can open a directory on the internal file system with the following methods:

Returns a representing the directory on the file system that"s uniquely associated with your app. Creates a new directory (or opens an existing directory) within your app"s unique file system directory. This new directory appears inside the directory provided by . Returns a representing the cache directory on the file system that"s uniquely associated with your app. This directory is meant for temporary files, and it should be cleaned up regularly. The system may delete files there if it runs low on disk space, so make sure you check for the existence of your cache files before reading them.

To create a new file in one of these directories, you can use the constructor, passing the object provided by one of the above methods that specifies your internal storage directory. For example:

Kotlin

val directory = context.filesDir val file = File(directory, filename)

Java

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

Save a file on external storage

Using the external storage is great for files that you want to share with other apps or allow the user to access with a computer.

Request external storage permissions

To write to the public external storage, you must request the permission in your :

... ...

Beginning with Android 4.4 (API level 19), reading or writing files in your app"s private external storage directory-accessed using -does not require the or permissions. So if your app supports Android 4.3 (API level 18) and lower, and you want to access only the private external storage directory, you should declare that the permission be requested only on the lower versions of Android by adding the attribute:

...

Verify that external storage is available

Because the external storage might be unavailable—such as when the user has mounted the storage to a PC or has removed the SD card that provides the external storage—you should always verify that the volume is available before accessing it. You can query the external storage state by calling . If the returned state is , then you can read and write your files. If it"s , you can only read the files.

For example, the following methods are useful to determine the storage availability:

Kotlin

/* Checks if external storage is available for read and write */ fun isExternalStorageWritable(): Boolean { return Environment.getExternalStorageState() == Environment.MEDIA_MOUNTED } /* Checks if external storage is available to at least read */ fun isExternalStorageReadable(): Boolean { return Environment.getExternalStorageState() in setOf(Environment.MEDIA_MOUNTED, Environment.MEDIA_MOUNTED_READ_ONLY) }

Java

/* 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; }

Save to a public directory

If you want to save public files on the external storage, use the method to get a representing the appropriate directory on the external storage. The method takes an argument specifying the type of file you want to save so that they can be logically organized with other public files, such as or . For example:

Kotlin

fun getPublicAlbumStorageDir(albumName: String): File? { // Get the directory for the user"s public pictures directory. val file = File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), albumName) if (!file?.mkdirs()) { Log.e(LOG_TAG, "Directory not created") } return file }

Java

public File getPublicAlbumStorageDir(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; }

If you want to hide your files from the Media Scanner, include an empty file named .nomedia in your external files directory (note the dot prefix in the filename). This prevents media scanner from reading your media files and providing them to other apps through the content provider.

Save to a private directory

If you want to save files on external storage that are private to your app and not accessible by the content provider, you can acquire a directory that"s used by only your app by calling and passing it a name indicating the type of directory you"d like. Each directory created this way is added to a parent directory that encapsulates all your app"s external storage files, which the system deletes when the user uninstalls your app.

Caution: Files on external storage are not always accessible , because users can mount the external storage to a computer for use as a storage device. So if you need to store files that are critical to your app"s functionality, you should instead store them on .

For example, here"s a method you can use to create a directory for an individual photo album:

Kotlin

fun getPrivateAlbumStorageDir(context: Context, albumName: String): File? { // Get the directory for the app"s private pictures directory. val file = File(context.getExternalFilesDir(Environment.DIRECTORY_PICTURES), albumName) if (!file?.mkdirs()) { Log.e(LOG_TAG, "Directory not created") } return file }

Java

public File getPrivateAlbumStorageDir(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; }

If none of the pre-defined sub-directory names suit your files, you can instead call and pass null . This returns the root directory for your app"s private directory on the external storage.

Kotlin

myFile.delete()

Java

myFile.delete();

If the file is saved on internal storage, you can also ask the to locate and delete a file by calling :

Kotlin

myContext.deleteFile(fileName)

Java

myContext.deleteFile(fileName);

Note: When the user uninstalls your app, the Android system deletes the following:

  • All files you saved on internal storage.
  • All files you saved external storage using .

However, you should manually delete all cached files created with on a regular basis and also regularly delete other files you no longer need.



Есть вопросы?

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: