Escribiendo archivos en la memoria externa (SD card)

Volviendo a retomar el tema de archivos, en esta ocación vamos a realizar una aplicación que me permita escribir un archivo de texto en la memoria externa (SD card) de nuestros dispositivos android, ya que en ocaciones nos resultará mas útil almacenar en la SD card debido a que su capacidad, por lo regular, siempre será mas grande que la memoria interna de nuestro dispositivo. También esto nos permitará compartir los archivos mas fácilmente con otros usuarios.

Así que para comenzar les recomiendo que tomen de base la aplicacion del tuto “Escibiendo archivos en la memoria interna” ya que la manera en que se escribe y se lee el archivo es la misma, lo único que cambiará es el acceso para poder almancenar en la memoria externa del dispositivo. Asi que sin mas vamos a comenzar:

1) Creamos un proyecto android llamado ArchivosEnSD con la API 10.
2) Nos vamos a nuestro archivo Manifest y agregamos la siguiente linea de código para indicar que nuestra aplicación tendra permiso de escribir en medios de almacenamiento externo.

2) En seguida diseñaremos nuestra UI la cual tendrá una caja de texto y dos botones. Les dejo el contenido del archivo main.xml.

4) Ahora importemos todo los que necesitamos en nuestra clase MainActivity.

5) Enseguida en nuestra clase MainActivity implementaremos la interface OnCLickListener con el fin de implementar el método onCLick agregando el código funcional para cada uno de los botones que agregamos en nuestra UI. A continuación se muestra el código de cómo quedaría nuestro clase MainActivity.

6) Después declaremos nuestras variables que representarán en código java los botones y caja de texto que se encuentran en nuestra UI.

7) Ahora en el método onCreate() haremos referencia a los controles que se encuentran en nuestra UI para poder manipularlos como objetos en nuestro código java y de una vez vamos a establecer quién será su clase onCLickListener.

8) En el método onClick() implementaremos el bloque de código que se encargará de escribir y leer un archivo de texto en la memoria externa de nuestro dispositivo Android. A diferencia con el código de la aplicación anterior, en esta aplicación estamos adicionando unas lineas de código las cuales nos permitirán obtener el directorio de la memoria externa para después crear un nuevo directorio dentro de ella y sobre ese nuevo crear nuestro archivo de texto. También, de esta misma forma sera mas fácil a accesar a nuestro archivo creado para despues leerlo. Se incluye una validación para el caso de que no se tenga un medio de almacenamiento externo.

9) Ya implementado todo el código anterior tenderemos ya terminado una aplicación en Android que permite Almacenar y Abrir un archivo de texto en nuestro en la memoria externa de nuestro dispositivo Android.

De esta manera finalizamos el tema de archivos.
Si alguno de nuestros lectores les surge alguna duda referente al tema de archivos estamos a sus ordenes para apoyarles en lo que mas se pueda.

Código Fuente | GitHub en la carpeta ArchivosEnSD

¿Te gustó este post? ¡Compártelo!

19 Comments


  1. Hola me gustaría saber más sobre la creación de archivos, actualmente tengo un problema sobre este tema, estoy creando una aplicación la cual entre una de sus actividades sea posible tomar una foto y guardarla en la memoria SD del dispositivo, pero me gustaría clasificar las fotos a través de carpetas y sub carpetas.

    Por ejemplo, si tome una foto el día de hoy, quiero que la guarde en un carpeta que diga el año actual, que esta a su vez tenga una sub carpeta que diga el mes actual y que este tenga una sub carpeta que diga el dia actual.

    /2012 /Abril / 7/ foto.png

    y así cada vez que tome una foto la clasifique de acuerdo al año, mes y día.

    No se si esto pueda ser posible, me gustaría hacerlo de esa manera, he estado buscando en Internet y en otros recursos, pero casi no encuentro mucha información sobre este tema.

    Les agradecería si me pudieran ayudar con esta problemática que tengo o recibir una alternativa a este problema.

    Reply

    1. Pues lo único que debes hacer es manejar la clase File de Java, de ahí pues dependerá de la distribución de tus carpetas según lo que me comentas y ya.

      En Android se utiliza de la misma forma que en Java la clase File.

      Saludos

      Reply

      1. Hola

        Los articulos son muy buenos. Tengo una duda, necesito escribir en las tarjetas SD pero en las versiones de android se llaman de diferente forma “Samsun s3 mini /storage/extSdCard 4.1.2”, “/mnt/extsd 4.2.2” y “sdcard (SD)”. Como se puede averiguar en forma dinamica estas rutas.

        Saludos

        Reply

  2. Buenas tardes.

    Quiero guardar un archivo (fotografía) en la SD ¿que variable debo implementar en lugar de EditText? sería ¿ImageView?

    Reply

  3. estoy aprendiendo sobre andriod y tengo una duda de un error en el while

    while ((charRead=isr.read(inputBuffer))&gt,0) {

    que no se puede convertir de entero a boleano &gt

    me podrian ayudar
    gracias

    Reply

    1. YA SOLUCIONE EL PROBLEMA DEL WHILE >0..
      Lo que se tiene que hacer es sustituir > por >
      De este modo ya funciona.
      Lo que sucede es que el editor de la pagina al momento de copiar el código lo pasa así: > y no como en realidad es: >
      Espero les sirva.
      Buena vibra y Éxito.

      Reply

  4. Buen día una pregunta funciona con una API menor a 10

    Reply

  5. Hola me agrado tu post muy bien explicado, solo una duda quiero descargar tu codigo pero el link esta roto, podrias arreglarlo para realizar la descarga

    Reply

  6. Muchisimas gracias, ha sido super útil, más que un curso que estoy haciendo…. GRACIAS!

    Reply

  7. hola yo tengo duda en :

    while ((charRead = isr.read(inputBuffer)) > 0)

    que es gt, como lo implemento o un equivalente ya mi maquina lo toma como error

    Reply

  8. Hola, Que puede pasar si despues de implementar todo los que poneis del proyecto, al pinchaar los botones, no hace nada? Ninguno de los dos botones…

    en el onClick del Button del activity.xml le he puesto a cada botón btnGuardar y btnAbrir, pero tampoco hacen nada… ¿alguna ocurrencia?

    Reply

    1. Ya me respondo yo mismo…. no habia puesto la linea en el manifest…

      Como se os ocurre hacer 4 o 5 ficheros? o un listado de las grabaciones de pantallas de texto???

      Reply

      1. Hola que tal jcgandroid, a que linea te refieres en el manifest…ya que tambien tengo el mismo problema, saludos.

        Reply

  9. Buen día… Me aparece un error en:
    while ((charRead = isr.read(inputBuffer)) > 0)…

    En el gt, primero, me dice que se espera “/” en vez de “;” y después me dice que cree la variable “gt”… qué es gt?….

    Reply

  10. Hola que tal a mi me marca un errro en el while de abrir donde dice > 0
    todo lo demas esta bien menos ese pequeño detalle

    Reply

  11. YA SOLUCIONE EL PROBLEMA DEL WHILE >0..
    Lo que se tiene que hacer es sustituir > por >
    De este modo ya funciona.
    Lo que sucede es que el editor de la pagina al momento de copiar el código lo pasa así: > y no como en realidad es: >
    Espero les sirva.
    Buena vibra y Éxito.

    Reply

  12. Hola, la creacion y la lectura funacionan muy bien, desde android, pero sabes como podría ver ese archivo creado, desde el explorador de windows? ya que no aparece.. De antemano gracias

    Reply

  13. HOLA BUEN DIA, MI PREGUNTA ES , COMO SE GUARDARIA UNA IMAGEN EN LA SD?

    Reply

  14. Buenas tardes, si alguien ha tenido experiencia haciendo escritura sobre estos archivos, quisiera saber como se comporta la aplicacion cuando el archivo de texto es muy grando debido a que se han almacenado bastantes datos en este, segun veo en el codigo el archivo se carga en memoria para poder hacer el “write” del texto, funciona esto asi? o estoy equivocado. Porfavor requiero de su ayuda porque es muy importante el desempeño de mi aplicacion y temo que al implementar la lectura y escritura de archivos de tamaño incremental afecte a este. Gracias.

    Reply

Leave a Reply

Your email address will not be published. Required fields are marked *