File.createTempFile () VS nuevo archivo ()

En mi aplicación añadí la posibilidad de agregar y guardar imágenes para el día cotidiano, representado por un Fragment .

Para guardar la imagen en la tarjeta SD, actualmente utilizo la función File.createTempFile :

 File imageFile = File.createTempFile(imageFileName, MyApplication.JPEG_FILE_SUFFIX, MyApplication.getAlbumDir()); 

De hecho, también he intentado con la forma estándar:

 File imageFile = new File(MyApplication.getAlbumDir(), imageFileName + MyApplication.JPEG_FILE_SUFFIX); 

Ambos están trabajando, pero en mi caso el primero es mejor que el segundo porque la función createTempFile agrega un número aleatorio largo al final del nombre del archivo, haciéndolo único.

Para dar un ejemplo, aquí es lo que obtengo con ambos métodos:

Con createTempFile : IMG_2013-06-18_-1961144729.jpg

Con nuevo Archivo : IMG_2013-06-18_.jpg

Finalmente mi pregunta es, ¿es seguro seguir utilizando createTempFile para guardar mis imágenes o tengo que usar la forma estándar y agregar algún código para generar un nombre de archivo único? ¿Debería usarse sólo para archivos temporales?

Revisé la documentación sobre la función pero no encontré nada acerca de las posibles consecuencias de usarlo en lugar de new File .

Gracias

Parece que su aplicación está creando archivos, por lo que debe garantizar nombres de archivo únicos. Puedes guardar algún tipo de contador dentro de tu aplicación (guardado en preferencias o DB) y usarlo. A continuación, puede crear nombres más cortos / controlados y controlar la singularidad. O puede usar createTempFile (), lo que le garantiza un nombre de archivo único (pero sólo obtiene control parcial del nombre de archivo). Suena como usted prefiere createTempFile (), así que no hay razón para no seguir usando si está satisfecho con los nombres de archivo que genera. No hay ningún inconveniente aparte de no tener control total sobre el formato de nombre de archivo.

Para los archivos internos temporales sus son 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 caché de las aplicaciones y por lo tanto pueden borrarse para crear espacio según sea necesario, pero la opción 1 agregará un número al azar al final del nombre de archivo para mantener los archivos únicos. También agregará una extensión de archivo que es .tmp por defecto, pero se puede establecer cualquier cosa mediante el uso del segundo parámetro. El uso del número aleatorio significa a pesar de especificar un nombre de archivo que no se mantiene igual que el número se agrega junto con la extensión de sufijo / archivo (.tmp por defecto), por ejemplo, se especifica el nombre de archivo como archivo interno 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 vía file.getName (); Pero necesitará guardarlo en algún lugar para que pueda usarlo cuando quiera, por ejemplo, para eliminar o leer el archivo. Por lo tanto, por esta razón prefiero la segunda opción como el nombre de archivo que se especifica es el nombre de archivo que se crea.

1. Crear archivo con nombre aleatorio

 File file = File.createTempFile(String prefix, String suffix, File parent) 
  • Realmente crear el archivo en disco y devuelve el objeto de archivo
  • Cree un nombre de archivo en este formato: prefijo + número aleatorio + sufijo
  • Útil cuando se necesita crear un archivo temporal en el disco

2. Crear archivo con nombre exacto

 File file = new File(File parent, String child); file.createNewFile(); 
  • Realmente crear el archivo en el disco y devuelve true si el archivo se crea con éxito

  • El nombre del archivo será exactamente igual al parámetro secundario

  • Útil cuando se necesita crear un archivo permanente en el disco

3. Cree sólo objeto de archivo (en memoria)

 File file = new File(File parent, String child); // doesn't create the file on disk until calling createNewFile() method 
  • Sólo crear el en la memoria y no en realidad en el disco
  • Útil cuando se necesita sólo crear objeto de archivo (por ejemplo, sólo para pasarlo como parámetro)

Parámetro parent puede ser uno de estos:

  1. Directorios privados de la aplicación

    • Context.getCacheDir ()
    • Context.getExternalCacheDir ()
    • Y … (la lista completa se puede encontrar aquí )
  2. Directorios públicos

    • Environment.getExternalStorageDirectory ()
    • Environment.getExternalStoragePublicDirectory (Environment.DIRECTORY_PICTURES)
    • Y … (la lista completa se puede encontrar aquí )
  • Lectura de archivos de texto desde el servidor en Android
  • Cómo guardar las fotos tomadas en una carpeta específica?
  • Creación de un archivo pdf en android mediante programación y escritura en él
  • Escribir archivos a un Android en C #
  • Imagen de mapa de bits de ahorro de Android temporalmente
  • Android java.io.File.fixSlashes (File.java:185)
  • Android Studio: no se puede resolver el símbolo "R"
  • Por qué, los recursos en android se convierten en HEXA-DECIMAL dentro de R.java
  • No se puede eliminar el archivo con la clase File
  • Java File.lastModified devuelve cambios de valor si cambia el huso horario?
  • Escribir un archivo de acceso privado en el directorio de archivos de otra aplicación
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.