Bueno, vamos a comenzar con un ejemplo para ver cómo es que Android maneja el almacenamiento interno. Cómo es que Android hace todo este manejo de la escritura de archivos y la escritura de preferencias compartidas. Lo vamos a estar viendo, en este ejemplo vamos a ver cómo podemos escribir un archivo en Android. Entonces, yo you me encuentro aquÃ, tengo un nuevo proyecto. Lo que voy hacer a continuación es únicamente asignarle un nombre. Y en este proyecto voy a colocar, le vamos a poner, memoria, okey, manejo de memoria o memoria, como gusten. Entonces voy a darle next, aquà donde está, voy a seleccionar el API. El API no hay problema, puedo seleccionar la que está en este momento, el API 15. Voy a darle next y lo que voy hacer es. Voy a seleccionar un empty activity pues voy a estar trabajando en mi propio layout, voy hacer a continuación un formulario en donde estemos solicitando un dato al usuario. Y entonces con ese dato que el usuario ingrese estaremos nosotros escribiendo un archivo. Ok, entonces mi proyecto está creándose en estos momentos. Está creándose, voy a esperar un momentito a Gradel termine de construir todo el proyecto y listo. Parece que you está listo. Entonces, iré aquà en activity main. En activity main lo primero que va hacer es cambiar el tipo de layout. Como haz podido ver en algunas sesiones anteriores, probablemente you pudiste conocer lo tipos de layout que tenemos. Para este tipo de layout parece que necesitamos un formulario. Nos conviene utilizar un linear layout, lo cambié ahora a continuación. También voy a cambiar la orientación o más bien voy a asignarle una orientación a este layout. Y le voy a decir que sea una orientación vertical. Listo, you tengo una orientación vertical si veo el preview, hasta el momento pues no ha afectado en nada. Seguimos teniendo este textview. entonces lo que voy a estar trabajando en este tipo de layout es primeramente, voy a provechar este text view para colocar un tÃtulo. Y le voy apone run id, asà le voy a poner titulo. Y como texto voy a mi archivo strings, que lo encuentro en la carpeta res, entonces y en la carpeta values. En el archivo strings lo que haré será definir un nuevo string, un nuevo recurso que se llame titulo. Entonces el tÃtulo de nuestra aplicación será escritura, le voy a poner aquà manejo de memoria. Listo. Esto mismo lo voy a colocar acá en mi propiedad text, le voy a asignar un tÃtulo. Listo, perfecto. Ahora únicamente voy a darle un poco de formato al tÃtulo y para esto lo que voy a estar trabajando es que el tÃtulo tenga un text size de unos 20 sps. Y que además este tÃtulo esté centrado. Entonces voy a colocar la propiedad android. Vamos a poner Gravity. Y vamos a poner center. Okey, vamos a decirle, center_horizontal. Y esta propiedad, a ver, vamos a ver con layout_gravity. Center_horizontal. Con esta sà nos permite. Entonces ahora voy a comenzar a crear. Dos edit text. Y mi primer edit texto lo voy a colocar aquÃ, voy a colocarle etiqueta edit tetxt. Vamos a colocarle aquà un match_parent y un wrap_content. Además, voy a poner un id, voy asignar un id. Por el momento lo que vamos a estar guardando en este edit text es el nombre de una persona. Lo que sea. Es lo que vamos a estar almacenando en nuestro archivo. Vamos a ponerle un hint. En hint, y el hint ahora lo vamos a colocar en nuestro archivo strings. Vamos a colocar en el hint, vamos a colocar en el archivo strings una variable que se llame nombre. Será el hint nombre. Vamos a poner aquà hint_nombre. Asà y realmente el hint lo que ahora vas a ver cómo es que funciona el hint. Pero el hint es un texto que aparece en nuestro edit text a modo de sombra. Como una sombra que en realidad no es un texto, que cuando la aplicación corra realmente tengas que borrar. Sino únicamente es un texto que aparece ahà como sombra. Y listo, eso es todo lo que debe tener mi EditText. Entonces voy a poner ahora un botón que tenga match parent de width y de height, que sea wrap content. Este botón va a tener un id, vamos a poner un id, vamos a poner btnGuardarArchivo. Guardar archivo, le vamos a colocar un texto a ese botón. Ese texto va a decir, vamos a ponerle aquà botón guardar. Vamos a poner generar, vamos a poner guardar. Guardar archivo. Guardar archivo, perfecto. Lo vamos a asignar aquà en la propiedad text del botón, android text, y le vamos a poner su texto. Guardar archivo, listo, perfecto. you tenemos ahà nuestra interfaz. Ahora a continuación, lo que haremos será ir a nuestro archivo Main activity. Y en nuestro archivo main activity declararemos un método, un método que se llame generar archivo. Entonces voy a comenzar como public void, generar archivo Éste va a recibir un view, vamos a poner aquà view. Recuerda ir importando todas las librerÃas de tu librerÃa view, etcétera. Entonces aquà lo que vamos a hacer es comenzar con un try catch. Vamos a comenzar con un try catch. Try, listo, y en el catch vamos a colocar una excepción, exception, vamos a ponerle e. Básicamente lo que siempre que a nosotros estemos manejando entradas y salidas de datos en Android, es muy importante siempre estar manejando excepciones. De hecho, android automáticamente o Java Nos van a solicitar que coloquemos try catch. Entonces dentro del try vamos a empezar a declarar un objeto, un objeto que sea FileOutputStream. Y vamos a decirle que se llame outputStream. Lo vamos a inicializar en null. Y este objeto FileOutputStream va a comenzar, vamos a inicializarlo con el método openFileOutput. Y lo que va a tener como primer parámetro si observas, nos está solicitando un string name. El string name será el nombre de nuestro archivo. Le vamos a poner MiArchivo.txt. A continuación viene el modo en que este archivo va a ser creado. Recuerda que podemos tener varios modos para precisamente manejar la seguridad de este archivo, y le voy a poner MODE_PRIVATE, que este archivo sea creado en modo privado. Bien, entonces utilizando mi objeto output string, lo que haré será decirle write. Y si observas, debemos escribir, esto lo que colocaremos aquà será el contenido del archivo, qué cosa vamos a escribir en ese archivo. Como dijimos hace un momento, lo que vamos a escribir será lo que una persona escriba en nuestro EditText en este elemento. Eso será lo que nosotros vamos a estar escribiendo en nuestro archivo. Entonces voy a regresarme tan sólo un poco, para primeramente estar declarando mi EditText. Voy a declarar mi EditText nombre. Hago mi casting, EditText, le voy a colocar su findViewById, R.id.edtNombre. Y lo que voy a hacer ahora es en una variable String, voy a declarar, voy a asignarle el nombre, el nombre de recuperado del EditText. Entonces con el método .getText, y ésto lo transformo a un string, toString. Entonces you aquà en estas dos lÃneas, you estoy catchando todo lo que una persona, un usuario, escriba en mi EditText. Entonces esto es lo que debo colocar en write. Pero además esto debo convertirlo a bytes. Esto va a hacer que nuestro archivo se escriba de una forma mucho más rápida. El desempeño de esta función sea mucho más rápida. Entonces voy a poner outputStream.close. Es muy importante cerrar, cerrar ésto. Y con ésto you estarÃa inscrito nuestro archivo. Entonces únicamente vamos a mostrarle un mensaje. Vamos a mostrar un mensaje a nuestro usuario, y vamos a decirle: El archivo se ha creado. Ahora todas estas variables nos las vamos a llevar a nuestro archivo string, y por supuesto todo esto lo vamos a estar llamando desde nuestro archivo string. Recuerda que esa es la forma correcta es la forma de tener una buena práctica de hacer esto muy bien hecho. Otra cosa que también voy a agregar es que si una persona you escribió su nombre y you le dio guardar al archivo, you creó el archivo, generó el texto, entonces además lo que haré será aquà Setear, setear mi EditText, realmente lo voy a resetear. Es decir lo voy a poner en blanco para que el texto no se quede ahà escrito de lo que la persona escribió. Entonces además Con esto you estarÃa todo, pero además voy a poner en mi catch un printStackTrace. Que si por algo, si ocurre algo algún error, o si sucede algo, entonces este e.printStackTrace nos ayudará a nosotros los programadores a identificar qué fue lo que sucedió. Pero además es bueno también decirle a nuestros usuarios que sucedió algo, que hubo un error en la escritura del archivo. Por supuesto es una muy mala práctica Imprimir, imprimir a los usuarios esto, imprimirles el error de código. Porque esto hace que los usuarios se confundan. Entonces vamos a correr esto, nos falta un detalle todavÃa antes de correrlo. Y es que siempre que nosotros estemos utilizando el almacenamiento en nuestra aplicación es muy importante en el archivo Android manifest. Como you lo hemos estado viendo, declarar los permisos suficientes para que todo esto ocurra. Entonces el primer permiso que voy a declarar es el permiso de Write, vamos a poner aquà WRITE_EXTERNAL_STORAGE. you sé que aquà me dirás no estamos utilizando el almacenamiento externo, pero aún asà es importante escribir esto. Aún asà Android nos lo va a referir en algunas versiones en algunas versiones donde estés corriendo tu aplicación. Y entonces puede por ahà lanzarnos una excepción de que nos falta agregar algún permiso. Entonces con esto podemos correr nuestro archivo. Yo por aquà you tengo mi emulador, you lo tengo listo, voy a darle play a esto. Voy a seleccionar nuestro emulador y además algo que quiero que observes y que tengas también por ahà presente es que levantes el Android Device Monitor, levantes tu Android Device Monitor, que selecciones por aquà tu dispositivo. Y ahora pongamos atención a lo que ocurre en la carpeta de file explorer. Aquà todavÃa esto esá intentando correr, you está casi a punto de correr. Entonces dentro de file explorer vamos a abrir la carpeta data, y de nuevo data ¿Para qué? Para precisamente estar monitoreando cómo es que se crea el archivo, dónde se está creando, y cómo es que se está creando. Entonces vamos una vez que el proyecto haya corrido, vamos a encontrar por aquà el nombre de nuestra aplicación. Nuestra aplicación se llama memoria. Aquà you está lista la aplicación. La vamos a abrir y hasta ahorita sólo tenemos estas dos carpetas. Vamos a ver qué es lo que sucede cuando escribimos el nombre de una persona. Por ejemplo voy a colocar Anahà Salgado y le voy a dar guardar archivo. Parece que nos está lanzando una excepción entonces vamos a revisar en nuestro en nuestra terminal qué fue lo que está ocurriendo. Vamos a encontrar. En realidad no es que esté ocurriendo un error, sino simplemente se nos olvido, o por ahà no prevenimos asignarle a nuestra nuestro botón el método que acabamos de crear. Recuerda que puede ir en el atributo on click. Entonces vamos a volver a correr esto, no hay ningún problema, no sucedió nada con nuestro código, todo está muy bien. Vamos a correrlo, vamos a esperar un poco. Esto lo voy a quitar, vamos a quitar esta aplicación. Y de nuevo vamos a poner atención por acá en nuestro File Explorer hasta que nuestra aplicación corra. Y hasta aquà vamos a colocar mi nombre Anahà Salgado y vamos a darle guardar archivo. Dice el archivo se ha creado. Y mira lo que sucedió en este momento, nos ha creado una nueva carpeta que se llama files. Y si observamos aquà adentro está el archivo que hemos creado. ¿Cómo puedo realmente asegurarme que este archivo contiene el texto que ingresé, o sea el nombre. Acá tenemos en la parte superior dos herramientas que nos ayudan a jugar con el file explorer de nuestro dispositivo. Entonces con esta herramienta de disket lo que yo hago a continuación es traerme este archivo, me lo traigo a mi escritorio, el archivo acá anda, aquà está. Entonces al momento de abrirlo lo que estoy observando es esto. Dice Anahà Salgado, se está creando el nombre del archivo. De la misma forma ahora sà escribo otro nombre, por ejemplo puedo poner Anahà puedo poner a lo mejor mi Twitter, voy a colocar @anncode. Lo voy a guardar. Dice el archivo se ha creado. Vamos a abrirlo de nuevo. Y lo que está sucediendo es que en este momento no se está sobrescribiendo nada. Esto es por el modo del archivo, que si revisamos nuestro código, el archivo está en modo private. Si nosotros quisiéramos que nuestro archivo se estuviera sobrescribiendo o que se estuviera a lo mejor concatenando, vamos a utilizar otro modo, el modo append. Vamos a utilizar el modo append, vamos a correr esto de nuevo. Y de esta forma puedes estar jugando con los modos del estado de poner el archivo para precisamente lograr lo que quieras. Como está en modo privado, you no nos permite sobreescribir el archivo, el archivo únicamente se crea. Y vamos a ver cómo funciona ahora en modo append. Voy a colocar de nuevo Anahà Vamos a colocar el Twitter, dijimos @anncode. Vamos a colocarle guardar. Más bien creo que lo que omitimos hace un momento fue realmente extraer de nuevo el archivo y guardarlo en el escritorio, eso fue más bien lo que sucedió. Y entonces vamos a abrirlo Ahorita el archivo, voy a eliminarlo. Listo. Vamos a guardarlo. you se ha creado el archivo. Simplemente que se está creando por acá en mi otro escritorio. Y al momento de abrirlo, aquà you tenÃamos el primer texto que habÃamos colocado anteriormente, si lo recuerdas. Y ahora está el siguiente texto que hemos colocado. Entonces con modo append simplemente el archivo lo empieza a concatenar. En el modo anterior, por supuesto, lo que hacÃa era reescribir el archivo, o sea todo el contenido que tenÃa lo sustituÃa por el nuevo texto. Como vimos anteriormente el archivo decÃa Anahà Salgado y lo que hizo fue sustituir ese texto por esto que está aquÃ, que dice @anncode, que fue lo que hicimos. Muy bien, esta es una forma muy sencilla, si observaste, hicimos muy poquitas lÃneas de código y de esta forma es como podemos estar manejando el almacenamiento interno, la escritura de archivos en Android. Nos vemos en el siguiente módulo.