¿Cómo puedo leer un archivo de texto en Android?

116

Quiero leer el texto de un archivo de texto. En el siguiente código, se produce una excepción (eso significa que va al catchbloque). Pongo el archivo de texto en la carpeta de la aplicación. ¿Dónde debería colocar este archivo de texto (mani.txt) para poder leerlo correctamente?

    try
    {
        InputStream instream = openFileInput("E:\\test\\src\\com\\test\\mani.txt"); 
        if (instream != null)
        {
            InputStreamReader inputreader = new InputStreamReader(instream); 
            BufferedReader buffreader = new BufferedReader(inputreader); 
            String line,line1 = "";
            try
            {
                while ((line = buffreader.readLine()) != null)
                    line1+=line;
            }catch (Exception e) 
            {
                e.printStackTrace();
            }
         }
    }
    catch (Exception e) 
    {
        String error="";
        error=e.getMessage();
    }
usuario1635224
fuente
4
¿Qué esperas que tu emulador sea parte de tu s / m? "E: \\ test \\ src \\ com \\ test \\ mani.txt"
Athul Harikumar
2
desde qué ubicación desea leer el archivo de texto ...?
Sandip Armal Patil
2
InputStream iS = resources.getAssets (). Open (fileName); (si coloca el archivo en activos)
Athul Harikumar
1
@Sandip en realidad copié el archivo de texto (mani.txt) y lo puse en la carpeta de la aplicación de Android (carpeta que tiene .settings, bin, libs, src, assets, gen, res, androidmanifeast.xml)
user1635224
2
o colóquelo simplemente en la carpeta res / raw y verifique mi respuesta actualizada.
Sandip Armal Patil

Respuestas:

242

Prueba esto :

Supongo que su archivo de texto está en la tarjeta sd

    //Find the directory for the SD Card using the API
//*Don't* hardcode "/sdcard"
File sdcard = Environment.getExternalStorageDirectory();

//Get the text file
File file = new File(sdcard,"file.txt");

//Read text from file
StringBuilder text = new StringBuilder();

try {
    BufferedReader br = new BufferedReader(new FileReader(file));
    String line;

    while ((line = br.readLine()) != null) {
        text.append(line);
        text.append('\n');
    }
    br.close();
}
catch (IOException e) {
    //You'll need to add proper error handling here
}

//Find the view by its id
TextView tv = (TextView)findViewById(R.id.text_view);

//Set the text
tv.setText(text.toString());

Los siguientes enlaces también pueden ayudarlo:

¿Cómo puedo leer un archivo de texto de la tarjeta SD en Android?

¿Cómo leer un archivo de texto en Android?

Archivo de recursos sin procesar de texto de lectura de Android

Shruti
fuente
3
su enlace me ayudaría a lograrlo
user1635224
10
¡El BufferedReader debe cerrarse al final!
RainClick
2
Si tiene una fila vacía en su documento txt, ¡este analizador dejará de funcionar! La solución es admitir tener estas filas vacías: while ((line = br.readLine()) != null) { if(line.length() > 0) { //do your stuff } }
Choletski
@Shruti cómo agregar el archivo a la tarjeta SD
Tharindu Dhanushka
@Choletski, ¿por qué dices que dejará de funcionar? Si hay una línea en blanco, la línea en blanco se agregará al texto StringBuilder. ¿Cuál es el problema?
LarsH
28

Si desea leer el archivo de la tarjeta SD. Entonces, el siguiente código podría ser útil para usted.

 StringBuilder text = new StringBuilder();
    try {
    File sdcard = Environment.getExternalStorageDirectory();
    File file = new File(sdcard,"testFile.txt");

        BufferedReader br = new BufferedReader(new FileReader(file));  
        String line;   
        while ((line = br.readLine()) != null) {
                    text.append(line);
                    Log.i("Test", "text : "+text+" : end");
                    text.append('\n');
                    } }
    catch (IOException e) {
        e.printStackTrace();                    

    }
    finally{
            br.close();
    }       
    TextView tv = (TextView)findViewById(R.id.amount);  

    tv.setText(text.toString()); ////Set the text to text view.
  }

    }

Si desea leer el archivo de la carpeta de activos,

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

O si desea leer este archivo desde la res/rawcarpeta, donde el archivo se indexará y se podrá acceder a él mediante una identificación en el archivo R:

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

Buen ejemplo de lectura de archivos de texto desde la carpeta res / raw

Sandip Armal Patil
fuente
2
brestá fuera de alcance en el bloque finalmente.
AlgoRythm
3

Primero, almacena su archivo de texto en una carpeta sin formato.

private void loadWords() throws IOException {
    Log.d(TAG, "Loading words...");
    final Resources resources = mHelperContext.getResources();
    InputStream inputStream = resources.openRawResource(R.raw.definitions);
    BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));

    try {
        String line;
        while ((line = reader.readLine()) != null) {
            String[] strings = TextUtils.split(line, "-");
            if (strings.length < 2)
                continue;
            long id = addWord(strings[0].trim(), strings[1].trim());
            if (id < 0) {
                Log.e(TAG, "unable to add word: " + strings[0].trim());
            }
        }
    } finally {
        reader.close();
    }
    Log.d(TAG, "DONE loading words.");
}
RAM
fuente
2

Prueba este código

public static String pathRoot = "/sdcard/system/temp/";
public static String readFromFile(Context contect, String nameFile) {
    String aBuffer = "";
    try {
        File myFile = new File(pathRoot + nameFile);
        FileInputStream fIn = new FileInputStream(myFile);
        BufferedReader myReader = new BufferedReader(new InputStreamReader(fIn));
        String aDataRow = "";
        while ((aDataRow = myReader.readLine()) != null) {
            aBuffer += aDataRow;
        }
        myReader.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return aBuffer;
}
HuynhHan
fuente
0

Prueba esto

try {
        reader = new BufferedReader(new InputStreamReader(in,"UTF-8"));
    } catch (UnsupportedEncodingException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }
      String line="";
      String s ="";
   try 
   {
       line = reader.readLine();
   } 
   catch (IOException e) 
   {
       e.printStackTrace();
   }
      while (line != null) 
      {
       s = s + line;
       s =s+"\n";
       try 
       {
           line = reader.readLine();
       } 
       catch (IOException e) 
       {
           e.printStackTrace();
       }
    }
    tv.setText(""+s);
  }
Muhammad Usman Ghani
fuente