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

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

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


person RSSS    schedule 25.05.2010    source источник
comment
вы хотите знать, как написать программу, которая читает текстовый файл, или вы хотите знать, как это сделать как пользователь?   -  person SteelBytes    schedule 25.05.2010


Ответы (5)


В вашем макете вам нужно что-то отображать текст. 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 или где-то еще, в зависимости от того, что вы хотите сделать.

person Dave Webb    schedule 25.05.2010
comment
@Android Developer - в примере кода говорится, что вам нужно добавить сюда правильную обработку ошибок. Вы сделали это, потому что это, вероятно, наиболее похожее место, где вы найдете свою проблему. - person Dave Webb; 21.07.2011
comment
@ Дэйв Уэбб, извините, что не обновил мой комментарий. это работает и для меня. На самом деле, когда я помещаю файл в DDMS, он удалит все данные из файла, поэтому в конце он возвращает null. - person Amit Thaper; 22.07.2011
comment
Будет ли это работать с использованием общего сетевого файла? Я хочу отправить файл в общий файл через Интернет, каталог файлов будет выглядеть так: 192.168.197.84/hdd1, ActivityLog.txt - person Michael Zeuner; 23.07.2012
comment
Большое спасибо, Дэйв, не могли бы вы также показать, как читать файлы wave/mp3 в массив байтов. - person Joyson; 13.10.2012
comment
@DaveWebb: вы также должны добавить разрешение на использование: READ_EXTERNAL_STORAGE в файле манифеста. - person Houcine; 15.03.2013

В ответ на

Не хардкодить /sdcard/

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

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

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

person Sibbs Gambling    schedule 21.06.2013
comment
для меня это дает некоторый мусор для повышения безопасности /com.app.name/data/sdcard/ ... имейте в виду. для журналов для себя, я жестко кодирую, наконец, это работает. - person Shimon Doodkin; 29.01.2015

У вас должно быть разрешение 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);
    }
}
person mralien12    schedule 21.08.2018
comment
Разрешения являются подсказкой, когда выше 6.0. Спасибо! - person xarlymg89; 12.10.2018

Осторожно: в некоторых телефонах есть 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...
person eric stockman    schedule 14.10.2017

person    schedule
comment
Можете ли вы дать объяснение своему коду, пожалуйста, например, где его использовать, почему это работает и т. д. - person Soma; 13.05.2015