Archivos Internos Y Externos.pdf

  • Uploaded by: Kaylord Maldonado
  • 0
  • 0
  • June 2020
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Archivos Internos Y Externos.pdf as PDF for free.

More details

  • Words: 1,100
  • Pages: 21
Ficheros en Android Memoria Interna y Memoria Externa

Opciones de almacenamiento ●

Almacenamiento externo



Almacenamiento de datos públicos en el almacenamiento externo compartido. ●



Almacenamiento de datos primitivos privados en pares clave-valor(generalmente preferencias del usuario).

Bases de datos SQLite Almacenamiento de datos estructurados en una base de datos privada. Conexión de red Almacenamiento de datos en la Web mediante tu propio servidor de red.

Preferencias compartidas



Almacenamiento interno 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 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/files/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 9 10 11 12 13 14

try { BufferedReader fin = new BufferedReader( new InputStreamReader( openFileInput("prueba_int.txt"))); String texto = fin.readLine(); fin.close(); } catch (Exception ex) { Log.e("Ficheros", "Error al leer fichero 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.getExternalStorageState(); if (estado.equals(Environment.MEDIA_MOUNTED)) { sdDisponible = true; sdAccesoEscritura = true; } else if (estado.equals(Environment.MEDIA_MOUNTED_READ_ONLY)) { sdDisponible = true; sdAccesoEscritura = false; } else { sdDisponible = false; sdAccesoEscritura = 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 directorio raiz de la memoria externa. Para ello utilizaremos el metodo

getExternalStorageDirectory() de la clase Environment el cuál nos retornara un objeto File con la ruta del directorio.

Escritura Ficheros Externos 1 2 Con el Objeto File 3 retornado, podremos 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 = Environment.getExternalStorageDirectory(); File f = new File(ruta_sd.getAbsolutePath(), "prueba_sd.txt"); OutputStreamWriter fout = new OutputStreamWriter( new FileOutputStream(f)); fout.write("Texto de prueba."); fout.close(); } catch (Exception ex) { Log.e("Ficheros", "Error al escribir fichero a 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 dentro de la memoria externa siguiendo el siguiente patrón: /Android/data/nuestro.paquete.java/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 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 <uses-permission> con el valor concreto android.permission.WRITE_EXTERNAL_STORAGE

Leer Ficheros Externos Tomando en cuenta lo anterior, nuestro fichero AndroidManifest.xml deberá de tener una estructura muy similar a la mostrada en el ejemplo.

<manifest xmlns:android="http://schemas.android.com/apk/res/android " package="net.sgoliver.android.ficheros" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE">

Leer Ficheros Externos Obtendremos el directorio raíz de la memoria externa con el método getExternalStorageDirectory() , o la carpeta específica de nuestra aplicación con getExternalFilesDir() Creamos un objeto File donde se combinará la ruta con el nombre del fichero que se desea leer. Para leer el texto utilizaremos un BufferedReader

Leer Ficheros Internos try { File ruta_sd = Environment.getExternalStorageDirectory();

Como se puede apreciar, el código es muy similar al visto para la escritura de ficheros.

File f = new File(ruta_sd.getAbsolutePath(), "prueba_sd.txt"); BufferedReader fin = new BufferedReader( new InputStreamReader( new FileInputStream(f))); String texto = fin.readLine(); fin.close(); } catch (Exception ex) { Log.e("Ficheros", "Error al leer fichero desde tarjeta SD"); }

Related Documents


More Documents from "Jairo"

June 2020 8
October 2019 98
Tangram.pdf
June 2020 2
May 2020 7