Trabajo con ficheros II

Hola CubaCoders:

En el tutorial anterior estuvimos viendo cómo manejar ficheros en la memoria interna y hoy volvemos a el trabajo con ficheros, pero esta vez dentro de la memoria externa o tarjeta SD aunque en los dispositivos modernos puede tratarse de una memoria externa que no es extraíble, a diferencia de la memoria interna todo lo que escribamos dentro de la externa es de acceso público tanto para aplicaciones como para el propio usuario por eso debemos tener cuidado con lo que escribimos en esta, bueno sin más preámbulo comenzamos.

Lo primero que debemos tener en cuenta es que la memoria externa puede existir o no en los dispositivos así que nos auxiliaremos del método getExternalStorageState(), perteneciente a la clase Enviroment, que será el encargado de decirnos si la memoria externa está disponible o no y si se puede leer o escribir en la misma, este método nos devuelve una serie de valores que nos indicaran el estado de la memoria:

MEDIA_MOUNTED: indica que la memoria está disponible y por tanto podemos leer y escribir en ella.

MEDIA_MOUNTED_READ_ONLY: indica que la memoria está disponible pero solo podemos leer de ella.

MEDIA_UNMONTED o MEDIA_REMOVED: estos serían algunos de los indicadores de que la memoria no está disponible o tiene algún problema.

Teniendo esto en cuenta ya podemos realizar un chequeo previo de la memoria externa antes de hacer cualquier operación sobre la misma

boolean disponible = false;

       boolean accesoescritura = false;

       String estado = Environment.getExternalStorageState();

       if(estado.equals(Environment.MEDIA_MOUNTED))

       {

           disponible = true;

           accesoescritura = true;

       }

       if(estado.equals(Environment.MEDIA_MOUNTED_READ_ONLY))

       {

           disponible = true;

           accesoescritura = true;

       }

       else

       {

           disponible = false;

            accesoescritura = false;

       }

 

Una vez chequeada el estado de la memoria y dependiendo del resultado obtenido podremos escribir o leer ficheros.

Vamos con la escritura, para escribir lo primero que tenemos que hacer es obtener la ruta de la raíz de la memoria externa y para ello utilizaremos el método getExternalStorageDirectory() de la clase Enviroment que devuelve un objeto File con la ruta de dicho directorio y luego crearemos otro objeto tipo File y le pasamos la dirección de la raíz de la memoria externa y el nombre del fichero que vamos a crear, luego utilizamos los métodos clásicos de Java para escribir como mismo hicimos en el tutorial anterior

if(disponible==true && accesoescritura == true) {

           try {

               File ruta = Environment.getExternalStorageDirectory();

               File f = new File(ruta.getAbsolutePath(), “prueba.txt”);

             OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream(f));

               out.write(“Esto es un fichero en la memoria externa”);

               out.close();

           } catch (Exception e) {

               Log.e(“Ficheros”, “Error al escribir en la memoria externa”);

           }

       }

Este código funciona sin problemas pero escribirá nuestro fichero directamente en la raíz de la memoria externa, lo cual no es una buena práctica, lo más factible sería crear una carpeta propia para nuestra aplicación, para esto utilizamos el método getExternalFilesDir(null) en vez de getExternalStorageDirectory(), este método nos devuelve la ruta de una carpeta específica para nuestra aplicación dentro de la memoria externa siguiendo el siguiente patrón:

raiz_memoria_externa/Android/data/nombre_del_paquete/files

 

una cosita que casi se me olvidaba para que nuestra aplicación pueda leer o escribir en la memoria externa es necesario darle permisos en el AndroidManifest.xml utilizando:

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

   <uses-permission android:name=”android.permission.READ_EXTERNAL_STORAGE”/>

 

Ahora veamos cómo hacer para leer el fichero una vez creado:

try {

               File ruta = Environment.getExternalStorageDirectory();

               File f = new File(ruta.getAbsolutePath(), “prueba.txt”);

               BufferedReader read = new BufferedReader(new InputStreamReader(new FileInputStream(f)));

                String texto = read.readLine();

               read.close();       

           } catch (Exception e) {

               Log.e(“Ficheros”, “Error al leer desde la memoria externa”);

           }

 

Como podemos ver el código es similar al que habíamos visto en el tutorial anterior así que no debería costarles trabajo entenderlo. Espero que estos tutoriales les sean útiles para el desarrollo de sus aplicaciones Android, no se olviden de dejar un comentario y nos vemos en el próximo tutorial.

Share
Soy Ingeniero en Ciencias Informáticas, me encanta programar sobre todo en C# y Android

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *