Come posso leggere un file di testo su Android?


116

Voglio leggere il testo da un file di testo. Nel codice seguente, si verifica un'eccezione (ciò significa che va al catchblocco). Ho inserito il file di testo nella cartella dell'applicazione. Dove devo mettere questo file di testo (mani.txt) per leggerlo correttamente?

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

4
cosa speri che il tuo emulatore faccia parte del tuo s / m? "E: \\ test \\ src \\ com \\ test \\ mani.txt"
Athul Harikumar

2
da quale posizione vuoi leggere il file di testo ...?
Sandip Armal Patil

2
InputStream iS = resources.getAssets (). Open (fileName); (se metti il ​​file in asset)
Athul Harikumar

1
@ Sandip effettivamente ho copiato il file di testo (mani.txt) e l'ho inserito nella cartella dell'applicazione Android (cartella con .settings, bin, libs, src, assets, gen, res, androidmanifeast.xml)
user1635224

2
o metti semplicemente nella cartella res / raw e controlla la mia risposta aggiornata.
Sandip Armal Patil

Risposte:


243

Prova questo :

Presumo che il tuo file di testo sia sulla scheda 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());

anche i seguenti link possono aiutarti:

Come posso leggere un file di testo dalla scheda SD in Android?

Come leggere un file di testo su Android?

Android legge il file di risorse raw di testo


3
il tuo link mi aiuta a raggiungere
user1635224

10
Il BufferedReader deve chiudersi alla fine!
RainClick

2
Se hai una riga vuota nel tuo documento txt, questo parser smetterà di funzionare! La soluzione è ammettere di avere queste righe vuote: while ((line = br.readLine()) != null) { if(line.length() > 0) { //do your stuff } }
Choletski

@Shruti come aggiungere il file nella scheda SD
Tharindu Dhanushka

@Choletski, perché dici che smetterà di funzionare? Se è presente una riga vuota, la riga vuota verrà aggiunta al testo StringBuilder. Qual è il problema?
LarsH

28

Se vuoi leggere il file dalla scheda SD. Quindi il codice seguente potrebbe essere utile per te.

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

    }

Se vuoi leggere il file dalla cartella delle risorse, allora

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

Oppure, se vuoi leggere questo file dalla res/rawcartella, dove il file verrà indicizzato ed è accessibile da un id nel file R:

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

Buon esempio di lettura di file di testo dalla cartella res / raw


2
brè fuori campo nel blocco finalmente.
AlgoRythm


3

Per prima cosa memorizzi il tuo file di testo nella cartella raw.

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

2

Prova questo codice

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

0

Prova questo

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);
  }
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.