Aprende Java Aprende Php Aprende C++ Aprende HTML 5 Aprende JavaScript Aprende JSON Aprende MySQL Aprende SQLServer Aprende Visual Basic 6 Aprende PostgreSQL Aprende SQLite Aprende Redis Aprende Kotlin Aprende XML Aprende Linux VSC Aprende Wordpress Aprende Laravel Aprende VueJS Aprende JQuery Aprende Bootstrap Aprende Netbeans Aprende Android
Sigueme en Facebook Sigueme en Twitter Sigueme en Instagram Sigueme en Youtube Sigueme en TikTok Sigueme en Whatsapp
Home / Android / Leer archivos de texto

Leer archivos de texto

Por jc mouse jueves, julio 18, 2013

En este tutorial de android, vemos como leer un archivo de texto y mostrarlo en pantalla del celular, el texto elegido es «Oración a mi Fusil» más conocido por la película Full Metal Jacket. Ademas para hacer algo más ameno la aplicación, haremos uso de dos botones para cargar dos archivos, uno en ingles y otro en español, de esta forma, aprenderemos, ademas de leer archivos, hacer uso de OnClickListener para varios botones.

A medida que se avanza en esta serie de mini tutoriales sobre android, se van complicando las cosas por lo cual, si ves que no entiendes algo, te aconsejo revisar post anteriores.

Herramientas

– Eclipse Indigo + Android instalado

Nivel: Android básico + Java intermedio

Tiempo: 15 minutos

PROYECTO

1. Crea un nuevo Android Application Project con los siguientes datos:

Application Name: Oracion a mi fusil

Project Name: OracionAMiFusil

Package Name: com.tutorial.oracionamifusil

Activity: Blank Activity

Activity Name: FusilActivity

Layout Name: activity_fusil

2. Construcción de la interfaz, abre el archivo activity_fusil.xml en modo gráfico

– Elimina el textView que se crea por defecto, elimina también el string relacionado a este.

– Añade 2 button y un editText Multiline

full metal

Para cada button:

clic derecho -> Edit Text… -> New String… cara crear y asignar nuevos textos

1er boton

String : Español

New R.string : strS

2do boton

String: Ingles

New R.string: strI

– Para cada botón también, clic derecho -> Layout Width -> Match Parent

– Finalmente cambia el ID para cada boton por «btnEspanol» y «btnIngles» respectivamente.

Para el editText

clic derecho -> Layout Width -> Match Parent

clic derecho -> Layout Height -> Match Parent

Cambia su ID por «txtOracion»

la interfaz debe tener ahora la siguiente forma:

burlon

4. Los archivos de texto que utilizaremos los colocaremos en la carpeta ASSETS, la razón porque esa carpeta nos permite crear nuestra propia estructura de trabajo a diferencia de la carpeta RES que es restrictiva. Crea la siguiente estructura de carpetas:

estructura

Eclipse nos permite crear directamente archivos de texto desde su interfaz, pero para quienes utilicen windows o.O se tendrá problemas con los caracteres especiales como los acentos que coloquemos en ellos y que no se verán o se verán deformados en el celular, para evitar este problema, abre el explorador y dirígete a la carpeta assets/archivos/ingles/ y crea ahí un archivo de  texto «oracion.txt» pero con codificación UTF-8, repite lo mismo para la carpeta assets/archivos/espanol/ .

Pega en cada archivo dependiendo del idioma

Ingles

This is my rifle. There are many like it, but this one is mine.
My rifle is my best friend. It is my life. I must master it as I must master my life.
My rifle, without me, is useless. Without my rifle, I am useless. I must fire my rifle true. I must shoot straighter than my enemy who is trying to kill me. I must shoot him before he shoots me. I will...
My rifle and I know that what counts in this war is not the rounds we fire, the noise of our burst, nor the smoke we make. We know that it is the hits that count. We will hit...
My rifle is human, even as I, because it is my life. Thus, I will learn it as a brother. I will learn its weaknesses, its strength, its parts, its accessories, its sights and its barrel. I will keep my rifle clean and ready, even as I am clean and ready. We will become part of each other. We will...
Before God, I swear this creed. My rifle and I are the defenders of my country. We are the masters of our enemy. We are the saviors of my life.
So be it, until victory is America's and there is no enemy, but peace!

Español

Este es mí fusil, hay otros muchos pero este es el mío.
Mi fusil es mi mejor amigo, y es mi vida, 
tengo que dominarlo igual que me domino a mi mismo. 
Sin mí mi fusil no sirve, sin mi fusil yo tampoco sirvo. 
Tengo que acertar con mi fusil, tengo que disparar a dar al enemigo que quiere matarme, 
tengo que darle antes de que me de a mi, lo haré. 
Esto que digo lo juro ante Dios, mi fusil y yo somos los defensores de mi patria, 
dominamos a nuestros enemigos y salvamos nuestras propias vidas.
Así sea, hasta que en vez de enemigos haya paz. 
Amén.

Debes tener esto en tu carpeta ASSETS

assets

5. Abre el archivo FusilActivity.java que esta en la carpeta SRC

package com.tutorial.oracionamifusil;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;

public class FusilActivity extends Activity {

 //code here

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_fusil);

  //code here
 }

 @Override
 public boolean onCreateOptionsMenu(Menu menu) {
  // Inflate the menu; this adds items to the action bar if it is present.
  getMenuInflater().inflate(R.menu.fusil, menu);
  return true;
 }

}

Reemplazamos por

package com.tutorial.oracionamifusil;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import android.os.Bundle;
import android.app.Activity;
import android.content.res.AssetManager;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class FusilActivity extends Activity implements OnClickListener{

    Button buton_espanol, buton_ingles;
 TextView textView;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_fusil);

  //controles
  buton_espanol = (Button) findViewById( R.id.btnEspanol );
  buton_ingles = (Button) findViewById( R.id.btnIngles );
  textView = (TextView) findViewById( R.id.txtOracion );  
  //Listener
  buton_espanol.setOnClickListener(this);
  buton_ingles.setOnClickListener(this);
 }

 @Override
 public boolean onCreateOptionsMenu(Menu menu) {
  // Inflate the menu; this adds items to the action bar if it is present.
  getMenuInflater().inflate(R.menu.fusil, menu);
  return true;
 }

 //New code

 @Override
 public void onClick( View arg0 ) {
  //dependiendo que boton se presione abre archivo en ingles o español
  switch ( arg0.getId() ) 
  {
   case R.id.btnEspanol : 
    leer( "archivos/espanol/oracion.txt" );    
    break;
   case R.id.btnIngles : 
    leer( "archivos/ingles/oracion.txt" );    
    break;
  }
 }

 /** Metodo para leer archivo de texto 
 * @param archivo Ruta del archivo de texto en la carpeta ASSETS
 * */
 public void leer( String archivo )
 {  
  AssetManager assetManager = getAssets();
  InputStream inputStream = null;
  try {
   inputStream = assetManager.open( archivo );
   String text = btoString( inputStream );
   textView.setText( text );
  } catch (IOException ex) {
   textView.setText( ex.getMessage() );
  }
  finally{
   if( inputStream != null )
   {
    try{
     inputStream.close();
    }
    catch( IOException ex )
    {
     textView.setText( ex.getMessage() );
    }
   }
  }
 }

 /** Convierte bytes en texto
 * @param inputStream de tipo InputStream
 * */
 public String btoString( InputStream inputStream ) throws IOException
 {  
  ByteArrayOutputStream b = new ByteArrayOutputStream();
  byte[] bytes = new byte[4096];
  int len=0;  
  while ( (len=inputStream.read(bytes))>0 )
  {
   b.write(bytes,0,len);   
  }
  return new String( b.toByteArray(),"UTF8");
 } 
 //end: New code

}

Explicación. En el ejemplo de este tutorial, leemos archivos ubicados en la carpeta ASSETS, esto, como dijimos más arriba, tiene la ventaja de que nos permite crear nuestra propia estructura de archivos y carpetas a diferencia de RES donde tenemos que regirnos por la estructura que tiene.

Para acceder a archivos de la carpeta ASSETS,  se hace uso de «AssetManager«:

Sintaxis

AssetManager assetManager = getAssets();

InputStream inputStream = assetManager.open( «directorio/directorio2/archivo.txt» );

Esto con respecto a android, como programador java conoces ya el manejo de InputStream por lo que no entraremos a más detalles, solo decir que esta clase retorna bytes por lo que debemos contar con una función para convertir estos bytes en STRING que es lo que necesitamos.

Ejecuta la aplicación y tenemos

full metal jacket

Proyecto eclipse Oración a mi fusil

Tags

Artículos similares

Introducción a Retrofit: Cliente para consumir un API REST

La página oficial de Retrofit, se describe así misma como «Un cliente REST seguro para Android y Java».  Y es así, ya qu[...]

UML Java: easyUML plugins para Netbeans

easyUML es una herramienta para crear diagramas UML para NetBeans de forma visual. Adecuado para el aprendizaje de este[...]

Crear XML desde una base de datos con jDom

Un post cortito de fin de semana 🙂 , este trata de la forma de extraer la información de una base de datos formar una es[...]

Insert, Update, Delete con Access y C#

En un post anterior vimos la forma de conectarnos a una base de datos Access con C#, pero de nada nos sirve solo conecta[...]

Formulario de login personalizado

Hola, en este oportunidad dejo a disposición un formulario de logueo que se me ocurrió de repente creo inspirado en las[...]

Programación Shell: Estructuras de control

Las estructuras de control de Shell son muy parecidos a otras lenguajes de programación. Las estructuras disponibles en[...]