Как я могу прочитать текстовый файл с SD-карты в Android? - PullRequest
60 голосов
/ 25 мая 2010

Я новичок в разработке для Android.

Мне нужно прочитать текстовый файл с SD-карты и отобразить этот текстовый файл. Есть ли способ просмотреть текстовый файл непосредственно в Android или как я могу прочитать и отобразить содержимое текстового файла?

Ответы [ 6 ]

120 голосов
/ 25 мая 2010

В вашем макете вам понадобится что-то для отображения текста.A TextView является очевидным выбором.Таким образом, у вас будет что-то вроде этого:

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

И ваш код будет выглядеть так:

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

Это может пойти в onCreate() методе вашего Activityили где-то еще, в зависимости от того, что именно вы хотите сделать.

6 голосов
/ 21 июня 2013

В ответ на

Не используйте жесткий код / ​​SDCard /

Иногда мы ДОЛЖНЫ жестко закодировать его, поскольку в некоторых моделях телефонов метод API возвращает внутреннюю память телефона.

Известные типы: HTC One X и Samsung S3.

Environment.getExternalStorageDirectory (). GetAbsolutePath () дает другой путь - Android

2 голосов
/ 21 августа 2018

У вас должно быть разрешение READ_EXTERNAL_STORAGE для чтения SD-карты. Добавить разрешение в manifest.xml

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

Начиная с Android 6.0 или выше, ваше приложение должно попросить пользователя предоставить опасные разрешения во время выполнения. Пожалуйста, обратитесь по этой ссылке Обзор разрешений

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);
    }
}
1 голос
/ 14 октября 2017

Осторожно: некоторые телефоны имеют 2 SD-карты, внутреннюю фиксированную и съемную карту. Вы можете найти название последнего через стандартное приложение: «Mijn Bestanden» (на английском языке: «MyFiles»?) Когда я открываю это приложение (элемент: все файлы), путь к открытой папке - «/ sdcard», при прокрутке вниз появляется запись «external-sd», при нажатии на которую открывается папка «/ sdcard / external_sd /». Предположим, что я хочу открыть текстовый файл «MyBooks.txt», я бы использовал что-то вроде:

   String Filename = "/mnt/sdcard/external_sd/MyBooks.txt" ;
   File file = new File(fname);...etc...
1 голос
/ 13 мая 2015
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 
        }
1 голос
/ 07 августа 2014
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();
                    }
                }
            }

        }
    }
}
...