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

Agregar soporte para JNLP en servidor Apache

Java Network Launching Protocol (JNLP) es una especificación usada por Java Web Start. Esta especificación, permite tene[...]

Código Único de Factura en PHP

Código Único de Factura para el Nuevo Sistema de Facturación Electrónica en Bolivia desarrollado en el lenguaje PHP 7 (H[...]

ExecutorService: Tareas asíncronas

Desde java 7 esta disponible la interface ExecutorService que se extiende de Executor y nos proporciona los métodos nece[...]

Como paginar registros en Java/Access

En este post veremos una forma de realizar la paginación en una base de datos Access utilizando el lenguaje de programac[...]

Simulador de Urna Electrónica en java

Hola 🙂 en esta ocasión un amigo del Brasil nos envía un proyecto java de una Urna Electrónica o Voto Electronico, desarr[...]

Animación de JProgressBar con hilos

Si nuestra aplicación tiene que llevar a cabo un cierto trabajo que no sabemos cuanto durará y que a la vez consume much[...]