getbytes example convertir convert bytes arreglo archivo android android-file

android - example - File.createTempFile() VS nuevo archivo()



java file to bytearrayoutputstream example (3)

En mi aplicación, agregué la posibilidad de agregar y guardar imágenes para el día a día, representadas por un Fragment .

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

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

En realidad, también he intentado con la forma estándar:

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

Ambos funcionan, 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, lo que lo hace único.

Para darle un ejemplo, esto 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 usando createTempFile para guardar mis fotos o tengo que usar la forma estándar y agregar un código para generar un nombre de archivo único? ¿Debería usarse solo para archivos temporales?

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

Gracias


Para 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 las aplicaciones y, por lo tanto, pueden borrarse para hacer espacio según sea necesario, pero la opción 1 agregará un número aleatorio al final del nombre de archivo para mantener los archivos únicos. También agregará una extensión de archivo que es .tmp de forma predeterminada, pero se puede establecer en cualquier cosa mediante el uso del segundo parámetro. El uso de un número aleatorio significa que, a pesar de especificar un nombre de archivo, no se mantiene igual que el número que se agrega junto con la extensión de sufijo / archivo (.tmp de forma predeterminada). . 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 necesitaría almacenarlo en algún lugar para poder usarlo cuando quiera, por ejemplo, para eliminar o leer el archivo. Por lo tanto, por este motivo, prefiero la segunda opción, ya que el nombre de archivo que especifique es el nombre de archivo que se crea.


Parece que su aplicación está creando archivos, por lo que necesita garantizar nombres de archivos únicos. Puede mantener algún tipo de contador dentro de su aplicación (guardado en preferencias o DB) y usarlo. Luego, puede crear nombres más cortos / más controlados, y controlar la singularidad por sí mismo. O puede usar createTempFile (), que le garantizará obtener un nombre de archivo único (pero solo obtendrá un control parcial del nombre de archivo). Suena como si prefieras createTempFile (), así que no hay razón para no seguir usándolo si estás contento con los nombres de archivo que genera. No hay nada negativo más que no tener control total sobre el formato del nombre de archivo.


1. Crear archivo con nombre aleatorio.

File file = File.createTempFile(String prefix, String suffix, File parent)

  • Realmente crea el archivo en el disco y devuelve el objeto de archivo
  • Cree un nombre de archivo en este formato: prefijo + número aleatorio + sufijo
  • Útil cuando necesitas crear un archivo temporal en el disco

2. Crear archivo con nombre exacto

File file = new File(File parent, String child); file.createNewFile();

  • En realidad, cree el archivo en el disco y devuelve true si el archivo se crea correctamente.

  • El nombre del archivo será exactamente igual a pasar al parámetro hijo

  • Útil cuando necesitas crear un archivo permanente en el disco

3. Crear solo objeto de archivo (en memoria)

File file = new File(File parent, String child); // doesn''t create the file on disk until calling createNewFile() method

  • Solo crea el en memoria y no en el disco.
  • Útil cuando solo necesita crear un objeto de archivo (por ejemplo, solo para pasarlo como parámetro)

parent parámetro parent puede ser uno de estos:

  1. Directorios privados de aplicaciones

    • context.getCacheDir ()
    • context.getExternalCacheDir ()
    • y ... (la lista completa se puede encontrar here )
  2. Directorios publicos

    • Environment.getExternalStorageDirectory ()
    • Environment.getExternalStoragePublicDirectory (Environment.DIRECTORY_PICTURES)
    • y ... (la lista completa se puede encontrar here )