Sigueme en Facebook Sigueme en Twitter Sigueme en Instagram Sigueme en Youtube
JC Mouse Bolivia
Index / Android / Leer archivos de texto

Leer archivos de texto

Autor 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

Si te ha gustado podrías compartirlo o dejar un comentario. ¡Muchas gracias!
Autor: JC Mouse

Yo soy yo :) JC Mouse, Soy orgullosamente boliviano soy fundador y CEO de la web jc-Mouse.net uno de las pocas web en emprendimiento y tecnología en Bolivia.

Toda la información que encuentres en este sitio es y sera completamente gratis siempre, puedes copiar, descargar y re-publicar si así lo deseas en otros blogs o sitios web, solo te pido a cambio que dejes una referencia a esta web. Esto nos ayuda a crecer y seguir aportando. Bye

Enjoy! :)

También Te Podría Interesar

Convertir objetos java en XML

Convertir objetos java en XML

Continuando con el estudio del meta lenguaje XML (Lenguaje de Marcado Extensible) bastante utilizado en el intercambio d...

Generación de laberintos: Algoritmo de Aldous-Broder

Generación de laberintos: Algoritmo de Aldous-Broder

El Algoritmo de Aldous-Broder llamado así por dos matemáticos, David Aldous and A. Broder (quienes trabajaban en la inve...

MAUS :- Simulador y Editor de exámenes para dispositivos móviles

MAUS :- Simulador y Editor de exámenes para dispositivos móviles

MAUS es una aplicación para dispositivos móviles con el Sistema Operativo Android que te permite realizar exámenes desde...

GraphADT: Clases para trabajar con grafos en java

GraphADT: Clases para trabajar con grafos en java

GraphADT es una proyecto alojado en github escrito en java que te permite trabajar con grafos, a la fecha de escribir es...

Numero a Literal en Java

Numero a Literal en Java

Cuando se realizan trabajos donde se necesita mostrar al cliente un determinado monto de dinero, tipo factura, recibo, c...

Construye la interfaz de facebook

Construye la interfaz de facebook

En este tutorial veremos un poco lo que es el diseño de interfaces en android, en lugar de colocar el ejemplo de uso de...

4 comentarios en “Leer archivos de texto”

  1. adria dice:

    Lo de modificar el idioma, no seria así, no es la forma correcta, se tendría que hacer en la carpeta valúes poner las terminación “es” y “en” quedando así “values-es” y “values-en”
    uno es para el español y el otro es para el ingles, entonces solo debes decirle al sistema que quieres los recursos que están en ingles y ya esta, de manera que ya no debes tener varios archivos. También así tendrás para todos los idiomas de un terminal

    1. Mouse dice:

      en el tuto mostramos la forma de leer un archivo de texto de la carpeta ASSETS 🙂

  2. poncho dice:

    hola, soy nuevo en esto, tendras un ejemplo de como leer un xml que esta en una direccion ftp??…

    saludos!…

  3. diego dice:

    hola y puedes crear archivos desde código en al asset?
    ejemplo : map.js quiero editarlo y guardarlo para diferentes lugares

Los comentarios estan cerrados

Comparte lo que sabes

Categorias

Últimas entradas

En un post anterior conocimos una herramienta Open Source con un conjunto de herramientas para el trabajo con imágenes e...

ImageMagick es un software de código abierto multiplataforma que contiene una serie de herramientas para leer, mostrar,...

OCR (Optical Character Recognition) en español, Reconociminto Optico de Caracteres, es el proceso por el cual  se extrae...

La misión espacial de la NASA, el Mars  2020 Rover Mission esta proyectada para lanzarse en julio de 2020 y su llegada s...

Android Bolivia

MAUS