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

CORBA en java .:. Ejemplo completo

CORBA en java .:. Ejemplo completo

Common Object Request Broker Architecture (CORBA) es un estándar que permite que diversos componentes de software escrit...

Gestión de Stock – La Vista (Parte 3)

Gestión de Stock – La Vista (Parte 3)

En esta tercera parte del tutorial crearemos la interfaz de usuario GUI (VISTA) para el sistema de gestión de stock. Tom...

Obtener Metadatos de una base de datos

Obtener Metadatos de una base de datos

La clase de java DatabaseMetaData nos permite obtener información exhaustiva sobre una base de datos, para ser más exact...

JASYPT : Cifrado simplificado Java

JASYPT : Cifrado simplificado Java

Jasypt es una biblioteca java que permite agregar capacidades básicas de encriptación a proyectos con el mínimo esfuerzo...

Reproducir video con JavaFX y HTML5

Reproducir video con JavaFX y HTML5

JavaFX implementa el control webview que nos permite agregar contenido HTML cargado mediante la clase WebEngine. El comp...

Uso de Tiles para crear fondo para aplicaciones

Uso de Tiles para crear fondo para aplicaciones

Un Tile o azulejo, es una parte seccionada de una imagen, por ejemplo la imagen de abajo (chica anime) esta dividida en...

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

Lorca Editor es una aplicación online creada por el desarrollador español Domingo Martin el cual tiene como objetivo el...

Eratóstenes era un matemático griego del siglo  III a.C. el cual ideó una manera rápida de obtener todos los números pri...

Las matemáticas son fundamentales para la vida y aparte de las actividades clásicas de enseñanza desarrolladas en el aul...

MVC es un patrón de arquitectura de software que separa una aplicación en tres componentes lógicos principales.  Estos s...

Herramientas

Generador de Enlaces a Whatsapp