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

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

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

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

Solutions Collecting From Web of "Создание временных файлов в Android"

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

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

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

Рекомендации по внутренним и внешним временным файлам:

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

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

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

Внешний кэш

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

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

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

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

1.

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

2.

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

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

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

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

Вы можете использовать метод File.deleteOnExit()

https://developer.android.com/reference/java/io/File.html#deleteOnExit ()

Здесь указывается https://developer.android.com/reference/java/io/File.html#createTempFile(java.lang.String , java.lang.String, java.io.File)