2011-04-24 26 views
113

Estoy tratando de leer un archivo de texto simple en mi aplicación de Android de ejemplo. Estoy usando el código escrito a continuación para leer el archivo de texto simple.Leyendo un archivo de texto simple

InputStream inputStream = openFileInput("test.txt"); 
InputStreamReader inputStreamReader = new InputStreamReader(inputStream); 
BufferedReader bufferedReader = new BufferedReader(inputStreamReader); 

Mi pregunta es: ¿Dónde debo colocar este archivo "test.txt" en mi proyecto ?. He intentado poner el archivo en "res/raw" y "asset", pero obtengo el exception "FileNotFound" cuando se ejecuta por primera vez el código escrito anteriormente.

Gracias por la ayuda

Respuesta

178

Coloque el archivo de texto en el directorio /assets el marco del proyecto Android. Use la clase AssetManager para acceder a ella.

AssetManager am = context.getAssets(); 
InputStream is = am.open("test.txt"); 

O también se puede poner el archivo en el directorio /res/raw, donde el archivo será indexado y es accesible por un identificador en el archivo R:

InputStream is = context.getResources().openRawResource(R.raw.test); 
+9

Se preguntaba acerca de la diferencia en el rendimiento entre estos dos métodos y una referencia rápida no mostraron diferencias apreciables. –

+0

¿Cuál es el tamaño del archivo de texto utilizado para las pruebas comparativas y colocaste imágenes y otros recursos en tu carpeta de res que simula una aplicación de Android en tiempo real (comercial/gratuita)? –

+0

¿No debería ** estar ** cerrado en un bloque try/finally? – saiyancoder

8

Tener un archivo en la carpeta de assets requiere el uso de esta pieza de código con el fin de obtener los archivos de la carpeta assets:

yourContext.getAssets().open("test.txt"); 

en este ejemplo getAssets(), devuelve una AssetManager instancia y luego puede usar el método que desee desde la API AssetManager.

26

probar esto,

package example.txtRead; 

import java.io.BufferedReader; 
import java.io.ByteArrayOutputStream; 
import java.io.FileReader; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.util.ArrayList; 
import java.util.List; 
import java.util.StringTokenizer; 
import java.util.Vector; 

import android.app.Activity; 
import android.os.Bundle; 
import android.widget.TextView; 

public class txtRead extends Activity { 
    String labels="caption"; 
    String text=""; 
    String[] s; 
    private Vector<String> wordss; 
    int j=0; 
    private StringTokenizer tokenizer; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     wordss = new Vector<String>(); 
     TextView helloTxt = (TextView)findViewById(R.id.hellotxt); 
     helloTxt.setText(readTxt()); 
} 

    private String readTxt(){ 

    InputStream inputStream = getResources().openRawResource(R.raw.toc); 
//  InputStream inputStream = getResources().openRawResource(R.raw.internals); 
    System.out.println(inputStream); 
    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); 

    int i; 
    try { 
    i = inputStream.read(); 
    while (i != -1) 
     { 
     byteArrayOutputStream.write(i); 
     i = inputStream.read(); 
     } 
     inputStream.close(); 
    } catch (IOException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
    } 

    return byteArrayOutputStream.toString(); 
    } 
} 
6

En Mono Para Android ....

try 
{ 
    System.IO.Stream StrIn = this.Assets.Open("MyMessage.txt"); 
    string Content = string.Empty; 
    using (System.IO.StreamReader StrRead = new System.IO.StreamReader(StrIn)) 
    { 
     try 
     { 
      Content = StrRead.ReadToEnd(); 
      StrRead.Close(); 
     } 
     catch (Exception ex) { csFunciones.MostarMsg(this, ex.Message); } 
     } 
      StrIn.Close(); 
      StrIn = null; 
} 
catch (Exception ex) { csFunciones.MostarMsg(this, ex.Message); } 
23

Esto es cómo lo hago:

public static String readFromAssets(Context context, String filename) throws IOException { 
    BufferedReader reader = new BufferedReader(new InputStreamReader(context.getAssets().open(filename))); 

    // do reading, usually loop until end of file reading 
    StringBuilder sb = new StringBuilder(); 
    String mLine = reader.readLine(); 
    while (mLine != null) { 
     sb.append(mLine); // process line 
     mLine = reader.readLine(); 
    } 
    reader.close(); 
    return sb.toString(); 
} 

lo utilizan de la siguiente manera:

readFromAssets(context,"test.txt") 
+1

Puede ser útil especificar la codificación del archivo, por ejemplo "UTF-8" como segundo parámetro en el constructor InputStreamReader. – Makalele

3

Para leer el archivo guardado en la carpeta de activos

public static String readFromFile(Context context, String file) { 
     try { 
      InputStream is = context.getAssets().open(file); 
      int size = is.available(); 
      byte buffer[] = new byte[size]; 
      is.read(buffer); 
      is.close(); 
      return new String(buffer); 
     } catch (Exception e) { 
      e.printStackTrace(); 
      return "" ; 
     } 
    } 
+1

"is.available();" no es seguro. Utilice AssetFileDescriptor fd = getAssets(). OpenFd (fileName); int size = (int) fd.getLength(); fd.close(); – GBY

Cuestiones relacionadas