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

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

Tangram: El rompecabezas chino

Tangram: El rompecabezas chino

El Tangram es un juego chino muy antiguo, esta compuesto por 7 piezas: un paralelogramo (romboide), un cuadrado y 5 triá...

Detectar un punto dentro de un polígono HTML5

Detectar un punto dentro de un polígono HTML5

En un ejemplo anterior [Seleccionar y mover shapes en html5] se utilizo un método sencillo para detectar si un punto se...

Evitar ejecutar un programa java más de una vez

Evitar ejecutar un programa java más de una vez

Cuando se hace uso de programas a veces no importa que este cree más de una instancia al mismo tiempo, por ejemplo podem...

JTable con JCheckBox y celdas NULL

JTable con JCheckBox y celdas NULL

Me llego la siguiente duda por facebook que me pareció interesante: «Se quiere desarrollar una tabla en java que haga us...

Colocar imagenes en un JComboBox

Colocar imagenes en un JComboBox

Para agregar imágenes a un JComboBox, partiremos de un proyecto Netbeans con la siguiente estructura: Tenemos dos clases...

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

El gigante tecnologico Google a puesto un bonito Doodle en su buscador que esta fascinando a sus millones de usuarios qu...

WhatsApp anuncio a través de su blog que ya se encuentra disponible la función de envío de fotos y videos TEMPORALES, es...

Muchas de las innovaciones computacionales de la NASA se desarrollaron para ayudar a explorar el espacio, pero ahora la...

TikTok es una plataforma de microvideos muy popular entre los jóvenes el cual cuenta ya con millones de videos cortps de...

Herramientas

Generador de Enlaces a Whatsapp