Leyendo un archivo de texto simple

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

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

Mi pregunta es: ¿Dónde debería colocar este archivo "test.txt" en mi proyecto ?. He intentado poner el archivo en la carpeta "res/raw" y "asset" pero recibo la exception "FileNotFound" cuando se exception "FileNotFound" primer código en vivo.

Gracias por la ayuda

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

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

O también puede colocar el archivo en el directorio /res/raw , donde se indexará el archivo y se podrá acceder mediante una identificación en el archivo R:

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

prueba 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 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(); 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(); } } 

Así es como 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(); } 

Úselo de la siguiente manera:

 readFromAssets(context,"test.txt") 

Tener un archivo en su carpeta de assets requiere que use este código para obtener archivos de la carpeta de assets :

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

En este ejemplo, getAssets() devuelve una instancia de AssetManager y luego puede utilizar el método que desee de la API de AssetManager .

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); } 

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 "" ; } } 

Aquí hay una clase simple que maneja archivos sin raw y asset :

clase pública ReadFromFile {

 public static String raw(Context context, @RawRes int id) { InputStream is = context.getResources().openRawResource(id); int size = 0; try { size = is.available(); } catch (IOException e) { e.printStackTrace(); return ""; } return readFile(size, is); } public static String asset(Context context, String fileName) { InputStream is = null; int size = 0; try { is = context.getAssets().open(fileName); AssetFileDescriptor fd = null; fd = context.getAssets().openFd(fileName); size = (int) fd.getLength(); fd.close(); } catch (IOException e) { e.printStackTrace(); return ""; } return readFile(size, is); } private static String readFile(int size, InputStream is) { try { byte buffer[] = new byte[size]; is.read(buffer); is.close(); return new String(buffer); } catch (Exception e) { e.printStackTrace(); return ""; } } 

}

Por ejemplo :

 ReadFromFile.raw(context, R.raw.textfile); 

Y para los archivos de activos:

 ReadFromFile.asset(context, "file.txt");