Cómo guardar datos en Android: Archivos


Buenas, estas semanas hemos aprendido a guardar datos de configuración mediante las SharedPreferences y en base de datos SQLite. Esta semana veremos otra forma de guardar datos, esta vez serán archivos. Crearemos un archivo y lo guardaremos en la tarjeta SD de nuestro dispositivo.



Lo primero que vamos a hacer es crear una clase que nos ayude a gestionar los archivos, la llamaremos filemanager ya que estaŕa destinada a gestionar archivos.


Las tarjetas SD pueden estar o no presentes en nuestro dispositivo por lo que antes de empezar a escribir o leer en ella nos aseguraremos que existe y podemos escribir en ella, para ello crearemos dos métodos estáticos (no tiene que existir una instancia de la clase para ser utilizadas), sus nombres son bastante significativos. El código es el siguiente y lo ubicamos dentro de nuestra clase nueva:


public static boolean isExternalStorageReadOnly() {  
 String extStorageState = Environment.getExternalStorageState();  
     if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(extStorageState)) {  
         return true;  
     }  
     return false;  
}  
   
public static boolean isExternalStorageAvailable() {  
     String extStorageState = Environment.getExternalStorageState();  
     if (Environment.MEDIA_MOUNTED.equals(extStorageState)) {  
         return true;  
     }  
     return false;  
} 


Lo siguiente que haremos será crear y escribir nuestro primer archivo, para ello vamos a utilizar el método getExternalStorageDirectory, el cual utilizaremos para poder obtener la ruta de nuestra tarjeta SD. Crearemos un nuevo objeto de tipo File con el cual podremos manejar todos nuestros archivos. En este caso le estamos pasando un nombre de archivo y el texto que insertaremos en el archivo mediante un OutPutStreamWriter. Una vez escrito cerramos todo y listo.


public void writeFile(String filename, String textfile){
try {
  if (isExternalStorageAvailable() && !isExternalStorageReadOnly()) { 
   File file = new File(Environment.getExternalStorageDirectory(), filename );
   OutputStreamWriter outw = new OutputStreamWriter(new FileOutputStream(file));
   outw.write(textfile);
   outw.close();
}
} catch (Exception e) {}  
}


En principio este sería todo el código necesario para poder escribir un archivo, pero para poder escribir, Android nos tiene que dejar escribir. ¿Cómo hacemos esto? Esto lo haremos diciéndole a Android que nuestra aplicación necesita permisos de escritura. Estos permisos se declaran en el archivo AndroidManifest.xml y es una especie de archivo global donde tenemos los permisos, el nombre de la aplicación, icono, y un montón de cosas que iremos mencionando aquí a medida que las vayamos necesitando. En este caso, hoy veremos como declarar permisos, en concreto este:
android.permission.WRITE_EXTERNAL_STORAGE
Abrimos nuestro archivo AndroidManifest.xml e insertamos la siguiente línea dentro del nodo manifest:


<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />


Este permiso será el que luego aparezca detallado cuando veáis las propiedades de la aplicación instalada en vuestro teléfono o al descargarla del Market cuando os indiquen que permisos requiere.

Una vez hecho esto vamos a por el último paso, leer el archivo que hemos escrito antes.


public String readFile(String filename){
 try{
  if(isExternalStorageAvailable()){
   File file = new File(Environment.getExternalStorageDirectory(), filename);
   BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
   String t = br.readLine();
   br.close();
   return t;
  } else {return "";}   
 } catch(Exception e){return "";}
}


En el método de lectura solamente compruebo que la tarjeta SD este disponible ya que solo voy a leer, vuelvo a crear un objeto tipo File para abrir el archivo que creamos antes y con un BufferedReader leemos el contenido y lo volcamos en una variable de tipo String, cerramos todo y devolvemos el texto leído.


Con estos cuatro métodos ya podeis empezar a manejar archivos, guardarlos y escribirlos en vuestra tarjeta SD, ahora os añado un pequeño ejemplo practico que podéis utilizar por ejemplo en nuestra activity, volcando el texto leído un TextView por ejemplo.


TextView lbl = (TextView) findViewById(R.id.lbl);
filemanager fm = new filemanager();
fm.writeFile("holamundo.txt", "nosinmiubuntu");
lbl.setText(fm.readFile("holamundo.txt"));


Por último, si estais probando este ejemplo en el emulador de Android aseguraros que vuestro dispositivo virtual tiene declarada una tarjeta SD, no es necesario que el espacio asignado sea muy grande para este ejemplo.

Comments are closed.