Archivos Internos y Externos
July 20, 2022 | Author: Anonymous | Category: N/A
Short Description
Download Archivos Internos y Externos...
Description
Ficheros en Android Memoria Interna y Memoria Externa
Opciones de almacenamiento ●
●
Almacenamiento externo
●
Preferencias compartidas
Almacenamiento de datos públicos en el
Almacenamiento de datos primitivos
almacenamiento externo compartido.
privados en pares clave-valor(generalmente preferencias del usuario).
Bases de datos SQLite
Almacenamiento de datos estructurados
●
Almacenamiento interno
en una base de datos privada. ●
Conexión de red
Almacenamiento de datos en la Web mediante tu propio servidor de red.
Almacenamiento de datos privados en la memoria del dispositivo.
Memoria Interna
Ficheros Internos Veamos en primer lugar cómo trabajar con la memoria interna del dispositivo. Cuando almacenamos ficheros en la memoria interna debemos tener en cuenta las limitaciones de espacio que tienen muchos dispositivos, por lo que no deberíamos abusar de este espacio utilizando ficheros de gran tamaño.
Escribir Ficheros Internos Escribir ficheros en la memoria interna es muy sencillo. Android proporciona para esto un método openFileOutput() Parámetro modo de acceso: ● ● ● ●
MODE_PRIVATE MODE_APPEND MODE_WORLD_READABLE MODE_WORLD_WRITABLE
Escribir Ficheros Internos Este método devuelve una referencia al stream de de salida asociado al fichero. Del cual ya podremos utilizar métodos de manipulación de ficheros tradicionales del lenguaje java.
1 2 3 4 5 6 7 8 9 10 11 12 13
try { OutputStreamWriter fout= new OutputStreamWriter( openFileOutput("prueba_int.txt", Context.MODE_PRIVATE)); fout.write("Texto de prueba."); fout.close(); } catch (Exception ex) { Log.e("Ficheros", "Error al escribir fichero a memoria interna"); }
Escribir Ficheros Internos Una vez creado el fichero de texto en la memoria interna, Android almacena por defecto los ficheros cerrados en una ruta determinada: /data/data/ paquete.java paquete.java/files/ /files/nombre_fichero nombre_fichero
Para poder comprobar que se haya creado correctamente en la ruta indicada es necesario utilizar el DDMS
Leer Ficheros Internos Leer ficheros desde la memoria interna es igual de sencillo. La unica diferencia se encuentra en que utilizaremos el metodo openFileInput() para abrir el fichero, y los metodos de lectura de java.io para poder leer el contenido.
Leer Ficheros Internos 1 2 3 4 5 6 7 8
try { BufferedReader fin = new BufferedReader( new InputStreamReader( openFileInput("prueba_int.txt"))); String texto = fin.readLine();
9 10 11 12 13
fin.close(); } catch (Exception ex) { Log.e("Ficheros", "Error al leer fichero
14
desde memoria interna"); }
Memoria Externa
Ficheros Externos Trabajar con memoria externa al dispositivo nos permite evadir los conflictos de la memoria limitada por el sistema, lo que generalmente es una memoria SD. ● ●
El almacenamiento externo es público. Asegurar que la memoria esta presente y disponible para leer y/o escribir
Escribir Ficheros Externos Para esto la API de Android proporciona el metodo
getExternalStorageStatus(), el cuál nos idica si la memoria externa se encuentra disponible, si se puede leer y escribir en ella, devolviendo: ● ● ●
MEDIA_MOUNTED MEDIA_MOUNTED_READ_ONLY Otro tipos de valores que indicaran la existencia de algun problema (MEDIA_UNMOUNTED,MEDIA_REMOVED,MEDIA_BAD_REMOVAL, .. Entre otros..)
Escribir Ficheros Externos En este ejemplo podemos realizar una comprobación del estado de la memoria externa: La primera cláusula del if nos indica si la memoria se encuentra montada La segunda cláusula nos indica que la memoria se encuentra montada, pero solo con permisos de lectura Y la ultima clausula nos dice que la memoria tiene algún error o que simplemente no puede ser utilizada.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
boolean sdDisponible = false; boolean sdAccesoEscritura = false; String estado = Environment.ge Environment.getExternalStorag tExternalStorageState(); eState(); if (estado.equal (estado.equals(Environment. s(Environment.MEDIA_MOUNTED)) MEDIA_MOUNTED)) { sdDisponible = true; sdAccesoEscritura sdAccesoEscri tura = true; } else if (estado.equal (estado.equals(Environment. s(Environment.MEDIA_MOUNTED_R MEDIA_MOUNTED_READ_ONLY)) EAD_ONLY)) { sdDisponible = true; sdAccesoEscritura sdAccesoEscri tura = false; } else { sdDisponible = false; sdAccesoEscritura sdAccesoEscri tura = false; }
Escritura Ficheros Externos Una vez haya se haya verificado el estado actual de la memoria y que cumpla con los permisos deseados para operar, podemos continuar. Para escribir un fichero a la memoria externa tenemos que obtener la ruta al de la memoria externa. de directorio raiz Para ello utilizaremos el metodo
getExternalStorageDirectory() de la clase Environment el cuál nos retornara un objeto File con la ruta del directorio. con
Escritura Ficheros Externos Con el Objeto File retornado, podremos
1 2 3 4
generar otro con el nombre5 deseado para el fichero, 7 8 creando un objeto file 9 combinando ambos 10 elementos. 11 12 13 14 15 16 17
try { File ruta_sd ruta_sd = Environment.getExternalStorageDirectory(); File f = new File(ruta File(ruta_sd.getAb _sd.getAbsolutePat solutePath(), h(), "prueba_sd.txt"); OutputStreamWriter fout = new OutputStreamWriter( new FileOutputStream(f)); fout.write("Texto de prueba."); fout.close(); } catch (Exception ex) { Log.e("Ficheros", Log.e("Fi cheros", "Error al escribir escribir fichero a tarjeta tarjeta SD"); }
Escritura Ficheros Externos El código anterior funciona sin problemas pero escribirá el fichero directamente en la carpeta raíz de la memoria externa, aunque en ocasiones puede resultar necesario, no es una buena práctica. Lo correcto sería disponer de una carpeta propia para nuestra aplicación, lo que además tendrá la ventaja de que al desinstalar la aplicación también se liberará este espacio. Esto lo conseguimos utilizando el método getExternalFilesDir(null) en vez de getExternalStorageDirectory() . El método getExternalFilesDir()nos devuelve directamente la ruta de una carpeta específica para nuestra aplicación aplicación dentro de la memoria externa siguiendo el siguiente patrón: /Android/data/nuestro.paquete.java /Android/data/ nuestro.paquete.java/files /files
Escritura Ficheros Externos Si en vez de null le indicamos como parámetro un tipo de datos determinado (DIRECTORY_MUSIC, DIRECTORY_PICTURES, DIRECTORY_MOVIES, DIRECTORY_RINGTONES, DIRECTORY_ALARMS, DIRECTORY_NOTIFICATIONS, DIRECTORY_PODCASTS) nos devolverá una subcarpeta dentro de la anterior con su nombre correspondiente. Así, por ejemplo, una llamada al método getExternalFilesDir(Environment.DIRECTORY_MUSIC) nos devolvería la siguiente carpeta: /Android/data/nuestro.paquete.java/files/Music
Esto último, además, ayuda a Android a saber qué tipo de contenidos hay en cada carpeta, de forma que puedan clasificarse clasificarse correctamente por ejemplo en la galería multimedia.
Leer Ficheros Externos Para tener acceso a la memoria externa, tendremos que especificar ene l fichero AndroidManifest.XML que nuestra aplicacion necesita permiso de escritura en dicha memoria. Para esto usaremos la clausula con el valor concreto android.permission.WRITE_EXTERNAL_STORAGE
Leer Ficheros Externos Tomando en cuenta lo anterior, nuestro fichero deberá de AndroidManifest.xml tener una estructura muy similar a la mostrada en el ejemplo.
View more...
Comments