martes, 22 de enero de 2013

Lectura y escritura de ficheros en Android

Introducción:

En este tutorial vamos a explicar unos métodos muy útiles a la hora de leer y escribir ficheros.

En este tutorial aprenderás:
  • Leer ficheros desde un recurso raw (solo lectura)
  • Leer ficheros desde memoria interna
  • Guardar ficheros en memoria interna
  • Leer ficheros desde memoria externa
  • Guardar ficheros desde memoria externa

Espero que le guste, si tiene alguna duda no dude en comentar.

¡ Saludos !


Enlaces de interés
El código de esta página a sido copiado desde los siguientes enlaces:

Memoria Interna y recurso raw
Aquí se explica de forma más detallada como leer y escribir desde la memoria interna además de leer desde un recurso raw.

Memoria externa
Aquí se explica de forma más detallada como leer y escribir desde la memoria externa.



Para aprender más:

Leer ficheros desde un recurso raw
Se trata de un fichero que ya está incluido como recurso de nuestra aplicación en /res/raw,  normalmente esta carpeta no está por defecto, por lo que tendremos que crearla.

Los ficheros raw se utilizan solo para leer ya que es imposible modificaros.

try { InputStream fraw = getResources().openRawResource(R.raw.prueba_raw); BufferedReader brin = new BufferedReader(new InputStreamReader(fraw)); String linea = brin.readLine(); fraw.close(); } catch (Exception ex) { Log.e("Ficheros", "Error al leer fichero desde recurso raw"); }

Leer ficheros desde memoria interna
Se trata de los ficheros que se guardan en la memoria interna del teléfono.

Para acceder a los archivos almacenados en la memoria interna del teléfono desde Eclipse tendremos que ir a la vista DDMS y a continuación en File Explorer nos vamos a data/data/paquete/files.



El método que se utiliza para leer desde memoria interna es:

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"); }



Guardar ficheros en memoria interna
Los ficheros se guardarán en la ruta data/data/paquete/files.


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"); }



Leer ficheros desde memoria externa
Son los ficheros que se guardan en la tarjeta SD del teléfono,

Para acceder a estos ficheros tendremos que ir a la vista DDMS de Eclipse, a continuación pulsamos sobre la pestaña File Explorer y en la ruta mnt/sdcard se encontrarán al final de la carpeta los ficheros almacenados en la memoria externa.


Para leerlo primero tendremos que darle permiso a la aplicación a través del manifiesto, tendremos que añadir al manifiesto:   
  <uses-permission
        android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="net.sgoliver.android" android:versionCode="1" android:versionName="1.0"> <uses-sdk android:minSdkVersion="7" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".AndroidFicheros" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>

Y finalmente utilizar el siguiente método:

try { File ruta_sd = Environment.getExternalStorageDirectory(); 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"); }


Guardar ficheros desde memoria externa
Los ficheros se guardarán en la tarjeta de memoria externa, y desde el Eclipse podemos verlos desde la vista DDMS en la ruta mnt/sdcard.

Tendremos a igual que el anterior añadirle los permisos al manifiesto para que la aplicación pueda acceder a la memoria externa.

<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="net.sgoliver.android" android:versionCode="1" android:versionName="1.0"> <uses-sdk android:minSdkVersion="7" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".AndroidFicheros" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>

Y finalmente el código para guardar un fichero en memoria externa.

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"); }


Fuente: sgoliver.net blog
FIN


2 comentarios:

  1. Como puedo hacer para visualizar un documento en formato pdf desde res/raw

    ResponderEliminar
  2. Hola ! Estoy intentando guardar un txt en memoria externa, me crea el directorio en la SD y todo, pero está vacío, el archivo nunca se genera, cuál puede ser el problema???

    ResponderEliminar