How can I read a text file from the SD card in Android?

AndroidAndroid Sdcard

Android Problem Overview


I am new to Android development.

I need to read a text file from the SD card and display that text file. Is there any way to view a text file directly in Android or else how can I read and display the contents of a text file?

Android Solutions


Solution 1 - Android

In your layout you'll need something to display the text. A TextView is the obvious choice. So you'll have something like this:

<TextView 
	android:id="@+id/text_view" 
	android:layout_width="fill_parent" 
	android:layout_height="fill_parent"/>

And your code will look like this:

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

This could go in the onCreate() method of your Activity, or somewhere else depending on just what it is you want to do.

Solution 2 - Android

In response to

> Don't hardcode /sdcard/

Sometimes we HAVE TO hardcode it as in some phone models the API method returns the internal phone memory.

Known types: HTC One X and Samsung S3.

https://stackoverflow.com/questions/17215466/environment-getexternalstoragedirectory-getabsolutepath-gives-a-different-pa

Solution 3 - Android

You should have READ_EXTERNAL_STORAGE permission for reading sdcard. Add permission in manifest.xml

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

From android 6.0 or higher, your app must ask user to grant the dangerous permissions at runtime. Please refer this link Permissions overview

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    if (checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 0);
    }
}

Solution 4 - Android

package com.example.readfilefromexternalresource;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

import android.app.Activity;
import android.app.ActionBar;
import android.app.Fragment;
import android.os.Bundle;
import android.os.Environment;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import android.widget.Toast;
import android.os.Build;

public class MainActivity extends Activity {
	private TextView textView;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		textView = (TextView)findViewById(R.id.textView);
		String state = Environment.getExternalStorageState();
		
		if (!(state.equals(Environment.MEDIA_MOUNTED))) {
			Toast.makeText(this, "There is no any sd card", Toast.LENGTH_LONG).show();
			
			
		} else {
			BufferedReader reader = null;
			try {
				Toast.makeText(this, "Sd card available", Toast.LENGTH_LONG).show();
				File file = Environment.getExternalStorageDirectory();
				File textFile = new File(file.getAbsolutePath()+File.separator + "chapter.xml");
				reader = new BufferedReader(new FileReader(textFile));
				StringBuilder textBuilder = new StringBuilder();
				String line;
				while((line = reader.readLine()) != null) {
					textBuilder.append(line);
					textBuilder.append("\n");
				
				}
				textView.setText(textBuilder);
				
			} catch (FileNotFoundException e) {
				// TODO: handle exception
				e.printStackTrace();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			finally{
				if(reader != null){
					try {
						reader.close();
					} catch (IOException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}
			}
			
		}
	}
}

Solution 5 - Android

BufferedReader br = null;
try {
        String fpath = Environment.getExternalStorageDirectory() + <your file name>;
        try {
            br = new BufferedReader(new FileReader(fpath));
        } catch (FileNotFoundException e1) {
            e1.printStackTrace();
        }
        String line = "";
        while ((line = br.readLine()) != null) {
         //Do something here 
        }

Solution 6 - Android

Beware: some phones have 2 sdcards , an internal fixed one and a removable card. You can find the name of the last one via a standard app:"Mijn Bestanden" ( in English: "MyFiles" ? ) When I open this app (item:all files) the path of the open folder is "/sdcard" ,scrolling down there is an entry "external-sd" , clicking this opens the folder "/sdcard/external_sd/" . Suppose I want to open a text-file "MyBooks.txt" I would use something as :

   String Filename = "/mnt/sdcard/external_sd/MyBooks.txt" ;
   File file = new File(fname);...etc...

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionRSSSView Question on Stackoverflow
Solution 1 - AndroidDave WebbView Answer on Stackoverflow
Solution 2 - AndroidSibbs GamblingView Answer on Stackoverflow
Solution 3 - Androidmralien12View Answer on Stackoverflow
Solution 4 - AndroidvikselnView Answer on Stackoverflow
Solution 5 - AndroidRSHView Answer on Stackoverflow
Solution 6 - Androideric stockmanView Answer on Stackoverflow