Creación de archivos temporales en Android


¿Cuál es la mejor manera de crear un archivo temporal en Android?

Puede Archivar.createTempFile ser utilizado? La documentación es muy vaga al respecto.

En particular, no está claro cuándo se eliminan los archivos temporales creados con File.createTempFile, si es que se eliminan.

Author: hpique, 2010-08-06

5 answers

Esto es lo que normalmente hago:

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

En cuanto a su eliminación, tampoco estoy completamente seguro. Dado que uso esto en mi implementación de una caché, elimino manualmente los archivos más antiguos hasta que el tamaño del directorio de caché se reduce a mi valor preestablecido.

 242
Author: sparkymat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-06-26 18:22:00

Mejores prácticas en internos y externos archivos temporales:

Caché Interna

Si desea almacenar en caché algunos datos, en lugar de almacenarlos persistentemente, debe usar getCacheDir() para abrir un archivo que represente la directorio interno donde su aplicación debe guardar caché temporal file.

Cuando el dispositivo tiene poco espacio de almacenamiento interno, Android puede eliminar estos archivos de caché para recuperar espacio. Sin embargo, usted debe no confiar en el sistema para limpiar estos archivos para usted. Usted siempre debe mantener los archivos de caché a sí mismo y permanecer dentro de un límite razonable de espacio consumida, como 1MB. Cuando el usuario desinstala su aplicación, estos archivos se eliminan.

Caché Externa

Para abrir un archivo que representa el directorio de almacenamiento externo donde debe guardar los archivos de caché, llame a getExternalCacheDir(). Si el usuario desinstala su aplicación, estos archivos serán automática eliminar.

Similar a ContextCompat.getExternalFilesDirs(), mencionado anteriormente, también puede acceder a un directorio de caché en un almacenamiento externo secundario (si está disponible) llamando a ContextCompat.getExternalCacheDirs().

Consejo: Para preservar el espacio de archivos y mantener el rendimiento de su aplicación, es importante que administre cuidadosamente sus archivos de caché y los elimine que ya no son necesarios a lo largo del ciclo de vida de su aplicación.

 85
Author: mibollma,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-11-11 16:21:52

Para los archivos internos temporales hay 2 opciones

1.

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

2.

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

Ambas opciones agregan archivos en el directorio de caché de aplicaciones y, por lo tanto, se pueden borrar para hacer espacio según sea necesario, pero la opción 1 agregará un número aleatorio al final del nombre del archivo para mantener los archivos únicos. También agregará una extensión de archivo que es .tmp por defecto, pero se puede establecer a cualquier cosa mediante el uso del segundo parámetro. El uso del número aleatorio significa a pesar de especificar un nombre de archivo no permanece igual que el número se agrega junto con el sufijo/extensión de archivo (.tmp por defecto) por ejemplo, especifica su nombre de archivo como internal_file y sale como internal_file1456345.tmp. Mientras que puede especificar la extensión, no puede especificar el número que se agrega. Sin embargo, puede encontrar el nombre de archivo que genera a través de file.getName();, pero tendría que almacenarlo en algún lugar para que pueda usarlo siempre que lo desee, por ejemplo, para eliminar o leer el archivo. Por lo tanto, por esta razón prefiero la 2ª opción como el nombre de archivo que especifique el nombre de archivo que se crea.

 26
Author: AdrenalineJunky,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-12-31 05:23:06

Puede usar el directorio de caché usando el contexto .getCacheDir () .

File temp=File.createTempFile("prefix","suffix",context.getCacheDir());
 12
Author: Macarse,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-11-23 04:22:48
 0
Author: kotucz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-06 12:45:17