Androideity

Programación android en español, tutoriales, documentación, noticias, smartphones, tablets, programación android, aplicaciones android

Escribiendo archivos en la memoria interna

| | 10 Comentarios

Que tal Androides!!!

Me es muy grato unirme a este proyecto y para comenzar a aportar en esta comunidad  comenzaré con este primer artículo.

Hay muchas maneras de almacenar archivos con aplicaciones android, ya sea en la memoria interna del dispositivo, en  memoria externa (sd card) o en la nube. En este primer artículo vamos a realizar un ejemplo de cómo almacenar texto plano en un archivo dentro de la memoria interna de nuestro dispositivo android. Asi que para comenzar sigamos los siguientes pasos:

1)      Creamos un proyecto android llamado Archivos.

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.

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

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

4)       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.

public class MainActivity extends Activity implements OnClickListener {

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        txtTexto = (EditText)findViewById(R.id.txtTexto);
        btnGuardar = (Button)findViewById(R.id.btnGuardar);
        btnAbrir = (Button)findViewById(R.id.btnAbrir);
        btnGuardar.setOnClickListener(this);
        btnAbrir.setOnClickListener(this);
    }

	@Override
	public void onClick(View arg0) {
		// TODO Auto-generated method stub
	}
}

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

 

	private EditText txtTexto;
	private Button btnGuardar;
	private Button btnAbrir;
	private static final int READ_BLOCK_SIZE=100;

6) 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.

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        txtTexto = (EditText)findViewById(R.id.txtTexto);
        btnGuardar = (Button)findViewById(R.id.btnGuardar);
        btnAbrir = (Button)findViewById(R.id.btnAbrir);
        btnGuardar.setOnClickListener(this);
        btnAbrir.setOnClickListener(this);
    }

7) En el método onClick() implementaremos el bloque de código que se encargará de escribir un archivo de texto en nuestro dispositivo Android. Este bloque se ejecutará cuando el usuario presione el botón de guardar.
El codigo se encuentra comentado.

public void onClick(View arg0) {
		// TODO Auto-generated method stub

		if (arg0.equals(btnGuardar)){
			String str = txtTexto.getText().toString();

			//Clase que permite grabar texto en un archivo
			FileOutputStream fout=null;
			try {

				fout =
				//Metodo que escribe y abre un archivo con un nombre especifica
				//La constante MODE_WORLD_READABLE indica que este arvhivo lo puede
				//leer cualquier apllicacion
				openFileOutput("archivoTexto.txt", MODE_WORLD_READABLE);

				//Convierte un stream de caracteres en un stream de bytes
				OutputStreamWriter ows = new OutputStreamWriter(fout);
				ows.write(str); //Escribe en el buffer la cadena de texto
				ows.flush(); //Volca lo que hay en el buffer al archivo
				ows.close(); //Cierra el archivo de texto

			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}

			Toast.makeText(getBaseContext(),
                             "El archivo se ha almacenado!!!", Toast.LENGTH_SHORT).show();

			txtTexto.setText("");
		}
	}

8) Ahora también en el método onClick() implementaremos el bloque de código que se encargará de leer un archivo de texto que se encuentra en nuestro dispositivo Android. Este bloque se ejecutará cuando el usuario presione el botón de Abrir.
El codigo se encuentra comentado.

	@Override
	public void onClick(View arg0) {
		// TODO Auto-generated method stub
		if (arg0.equals(btnAbrir)){
			try {

				//Se lee el archivo de texto indicado
				FileInputStream fin =
					openFileInput("archivoTexto.txt");
				InputStreamReader isr = new InputStreamReader(fin);

				char[] inputBuffer = new char[READ_BLOCK_SIZE	];
				String str= "";

				//Se lee el archivo de texto mientras no se llegue al final de él
				int charRead;
				while ((charRead=isr.read(inputBuffer))>0) {
					//Se lee por bloques de 100 caracteres
					//ya que se desconoce el tamaño del texto
					//Y se va copiando a una cadena de texto
					String strRead =
						String.copyValueOf(inputBuffer, 0, charRead);
					str += strRead;

					inputBuffer = new char [READ_BLOCK_SIZE];
				}

				//Se muestra el texto leido en la caje de texto
				txtTexto.setText(str);

				isr.close();

				Toast.makeText(getBaseContext(),
						"El archivo ha sido cargado", Toast.LENGTH_SHORT).show();

			} catch (IOException e) {
				// TODO: handle exception
				e.printStackTrace();
			}

		}
	}

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 dispositivo Android.

De esta manera finalizamos el primer artículo y posteriormente estaremos realizando otro que nos permita escribir archivos en la memoria externa (sd card).

Código fuente | Repositorio GitHub directorio Archivos

 

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

 

Comparte este post

Acerca de: GustavoIvanVega

Arquitecto, analista y desarrollador con tecnologías .NET Difusor entusiasta de las TIC's en México. Fiel seguidor del proyecto Android en México

Sígueme en Twitter

Leer todos mis artículos

También puede interesarte

Comentarios de este artículo

  • Pingback: Escribiendo archivos en la memoria externa (SD card) | | AndroideityAndroideity

  • https://sites.google.com/site/gustavopedreros/ Gustavo Pedreros

    gracias :o

  • the2cto

    Gracias! pero tengo una duda con el botón abrir, en el while tienes “>0″ qué significa gt ?

    • the2cto

      jajajaja olvídalo, ya lo descubrí justo cuando se publicó el mensaje :D

  • the2cto

    Ahora mi duda es dónde se almacena el Archivo txt? ya lo busqué pero no lo encuentro, y la app si despliega su contenido =S

  • Marcela Peña Murallas

    si lo que quiero es guardar una imagen??….que codigo cambiaria? :)

  • Jhodat Trejo

    hola que tal tengo una duda ya que tengo una falla con el while de abrir en la parte que dice >0 me marca un error. Es el unico que marca y por consiguiente la app no corre, otra duda: donde se guarda el archivo de texto creado?

  • irvin

    en que parte de mi telefono se guarda no lo encuentro

  • Martin

    Como puedo hacer que se añadan los datos al final del archivo que estoy escribiendo? En java hay clases que utilizan un parámetro boolean para eso, pero openFileOutput no lo permite.

  • http://batman-new.com alex

    de donde sale gt…. me sale error en esta linea:
    while ((charRead=isr.read(inputBuffer))>0) {