Создание временных файлов на Android

Какой лучший способ создать временный файл в Android?

Можно ли использовать File.createTempFile? Документация очень расплывчата.

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

Ответ 1

Это то, что я обычно делаю:

File outputDir = context.getCacheDir(); // context being the Activity pointer
File outputFile = File.createTempFile("prefix", "extension", outputDir);

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

Ответ 2

Лучшие практики internal и external временные файлы:

Внутренний кеш

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

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

Внешний кэш

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

Аналогично ContextCompat.getExternalFilesDirs(), упомянутому выше, вы также можете получить доступ к каталогу кеша на вторичном внешнем хранилище (если доступно), вызывая ContextCompat.getExternalCacheDirs().

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

Ответ 3

Для временных внутренних файлов у них есть 2 варианта

1.

File file; 
file = File.createTempFile(filename, null, this.getCacheDir());

2.

File file
file = new File(this.getCacheDir(), filename);

Обе опции добавляют файлы в каталог кэша приложений и, следовательно, могут быть очищены, чтобы освободить место по мере необходимости, но опция 1 добавит случайное число в конец имени файла, чтобы сохранить файлы уникальными. Он также добавит расширение файла, которое .tmp по умолчанию, но может быть установлено на что угодно с помощью второго параметра. Использование случайного числа означает, что, несмотря на указание имени файла, оно не остается таким же, как добавляется число вместе с расширением суффикса/файла (.tmp по умолчанию), например, вы указываете свое имя файла как internal_file и выходите как internal_file1456345.tmp. Если вы можете указать расширение, вы не можете указать добавленный номер. Однако вы можете найти имя файла, которое оно генерирует через file.getName();, но вам нужно будет его хранить где-нибудь, чтобы вы могли использовать его, когда захотите, например, удалить или прочитать файл. Поэтому по этой причине я предпочитаю второй вариант, так как имя файла, которое вы указываете, является созданным именем файла.

Ответ 4

Вы можете использовать реестр кеша, используя context.getCacheDir().

File temp=File.createTempFile("prefix","suffix",context.getCacheDir());