Создание временных файлов в Android - PullRequest
188 голосов
/ 06 августа 2010

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

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

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

Ответы [ 6 ]

260 голосов
/ 26 июня 2011

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

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

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

89 голосов
/ 30 июня 2011

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

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

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

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

Внешний кэш

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

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

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

34 голосов
/ 25 ноября 2013

Для временных внутренних файлов их 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();, но вам нужно будет сохранить его где-нибудь, чтобы вы могли использовать его в любое время, например, для удаления или чтения файла. Поэтому по этой причине я предпочитаю второй вариант, поскольку указанное вами имя файла является именем файла, который создается.

13 голосов
/ 26 июня 2011

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

File temp=File.createTempFile("prefix","suffix",context.getCacheDir());
0 голосов
/ 15 марта 2019

Сделай это просто. Согласно документации https://developer.android.com/training/data-storage/files

String imageName = "IMG_" + String.valueOf(System.currentTimeMillis()) +".jpg";
        picFile = new File(ProfileActivity.this.getCacheDir(),imageName);

и удалите его после использования

picFile.delete()
0 голосов
/ 06 февраля 2017

Вы можете использовать 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)

...