Какой лучший способ создать временный файл в Android?
Можно ли использовать File.createTempFile? Документация очень расплывчата.
В частности, это неясно, когда временные файлы, созданные с помощью File.createTempFile
, удаляются, если когда-либо.
Какой лучший способ создать временный файл в Android?
Можно ли использовать File.createTempFile? Документация очень расплывчата.
В частности, это неясно, когда временные файлы, созданные с помощью File.createTempFile
, удаляются, если когда-либо.
Это то, что я обычно делаю:
File outputDir = context.getCacheDir(); // context being the Activity pointer
File outputFile = File.createTempFile("prefix", "extension", outputDir);
Что касается их удаления, я тоже не уверен. Поскольку я использую это в своей реализации кеша, я вручную удаляю самые старые файлы, пока размер каталога кэша не снизится до моего заданного значения.
Лучшие практики internal и external временные файлы:
Если вы хотите кэшировать некоторые данные, а не сохранять их настойчиво, вы должны использовать
getCacheDir()
, чтобы открыть файл, представляющий внутренний каталог, в котором ваше приложение должно сохранять временный кеш файлы.Когда устройство находится на низком внутреннем пространстве памяти, Android может удалить эти кеш файлы для восстановления пространства. Однако вы не должны полагаться на система для очистки этих файлов для вас. Вы всегда должны поддерживать кэш файлы сами и остаются в пределах разумного предела пространства потребляется, например, 1 МБ. Когда пользователь удаляет ваше приложение, эти файлы удаляются.
Чтобы открыть файл, представляющий каталог внешней памяти, где вы должны сохранить файлы кеша, вызовите
getExternalCacheDir()
. Если пользователь удаляет ваше приложение, эти файлы будут автоматически удален.Аналогично
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
по умолчанию, но может быть установлено на что угодно с помощью второго параметра. Использование случайного числа означает, что, несмотря на указание имени файла, оно не остается таким же, как добавляется число вместе с расширением суффикса/файла (.tmp
по умолчанию), например, вы указываете свое имя файла как internal_file
и выходите как internal_file1456345.tmp
. Если вы можете указать расширение, вы не можете указать добавленный номер. Однако вы можете найти имя файла, которое оно генерирует через file.getName();
, но вам нужно будет его хранить где-нибудь, чтобы вы могли использовать его, когда захотите, например, удалить или прочитать файл. Поэтому по этой причине я предпочитаю второй вариант, так как имя файла, которое вы указываете, является созданным именем файла.
Вы можете использовать реестр кеша, используя 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)