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

后端 未结 6 2032
太阳男子
太阳男子 2020-11-22 16:42

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

相关标签:
6条回答
  • 2020-11-22 16:53

    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.

    0 讨论(0)
  • 2020-11-22 16:57

    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...
    
    0 讨论(0)
  • 2020-11-22 16:58
    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();
                        }
                    }
                }
    
            }
        }
    }
    
    0 讨论(0)
  • 2020-11-22 16:59

    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);
        }
    }
    
    0 讨论(0)
  • 2020-11-22 17:05
    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 
            }
    
    0 讨论(0)
  • 2020-11-22 17:07

    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.

    Environment.getExternalStorageDirectory().getAbsolutePath() gives a different path - Android

    0 讨论(0)
提交回复
热议问题