Wie kann ich eine Textdatei in Android lesen?

116

Ich möchte den Text aus einer Textdatei lesen. Im folgenden Code tritt eine Ausnahme auf (dh, sie geht zum catchBlock). Ich habe die Textdatei in den Anwendungsordner gelegt. Wo soll ich diese Textdatei (mani.txt) ablegen, um sie richtig zu lesen?

    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();
    }
user1635224
quelle
4
Was hoffen Sie, dass Ihr Emulator ein Teil Ihres S / M ist? "E: \\ test \\ src \\ com \\ test \\ mani.txt"
Athul Harikumar
2
Von welchem ​​Ort aus möchten Sie die Textdatei lesen ...?
Sandip Armal Patil
2
InputStream iS = resources.getAssets (). Open (Dateiname); (wenn Sie die Datei in Assets setzen)
Athul Harikumar
1
@Sandip tatsächlich habe ich Textdatei (mani.txt) kopiert und in den Ordner der Android-Anwendung (Ordner mit .settings, bin, libs, src, Assets, Gen, Res, androidmanifeast.xml)
Benutzer 1635224
2
oder legen Sie einfach in res / raw Ordner und überprüfen Sie meine aktualisierte Antwort.
Sandip Armal Patil

Antworten:

242

Versuche dies :

Ich gehe davon aus, dass sich Ihre Textdatei auf einer SD-Karte befindet

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

Folgende Links können Ihnen auch helfen:

Wie kann ich eine Textdatei von der SD-Karte in Android lesen?

Wie lese ich eine Textdatei in Android?

Android liest Text Rohressourcendatei

Shruti
quelle
3
Ihr Link würde mir helfen zu erreichen
user1635224
10
Der BufferedReader muss am Ende geschlossen werden!
RainClick
2
Wenn Sie eine leere Zeile in Ihrem txt-Dokument haben, funktioniert dieser Parser nicht mehr! Die Lösung besteht darin, zuzugeben, dass diese leeren Zeilen vorhanden sind: while ((line = br.readLine()) != null) { if(line.length() > 0) { //do your stuff } }
Choletski
@ Shruti, wie man die Datei auf SD-Karte hinzufügt
Tharindu Dhanushka
@Choletski, warum sagst du, dass es nicht mehr funktioniert? Wenn eine Leerzeile vorhanden ist, wird die Leerzeile an den Text StringBuilder angehängt. Was ist das Problem?
LarsH
28

Wenn Sie die Datei von der SD-Karte lesen möchten. Dann könnte der folgende Code für Sie hilfreich sein.

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

    }

Wenn Sie eine Datei aus dem Asset-Ordner lesen möchten, dann

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

Oder Wenn Sie diese Datei aus einem res/rawOrdner lesen möchten, in dem die Datei indiziert wird und auf den über eine ID in der R-Datei zugegriffen werden kann:

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

Gutes Beispiel für das Lesen einer Textdatei aus dem Ordner res / raw

Sandip Armal Patil
quelle
2
brist im finally-Block außerhalb des Gültigkeitsbereichs.
AlgoRythm
3

Zuerst speichern Sie Ihre Textdatei in einem Rohordner.

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
quelle
2

Versuchen Sie diesen Code

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
quelle
0

Versuche dies

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
quelle