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

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

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

В вашем макете вам потребуется что-то, чтобы отобразить текст. TextView – очевидный выбор. Итак, у вас будет что-то вроде этого:

  

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

 //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 или в другом месте в зависимости от того, что вы хотите сделать.

В ответ на

Не используйте hardcode / sdcard /

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

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

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

 BufferedReader br = null; try { String fpath = Environment.getExternalStorageDirectory() + ; try { br = new BufferedReader(new FileReader(fpath)); } catch (FileNotFoundException e1) { e1.printStackTrace(); } String line = ""; while ((line = br.readLine()) != null) { //Do something here } 
 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(); } } } } } } 

Остерегайтесь: в некоторых телефонах есть 2 sdcards, внутренний фиксированный и съемная карта. Вы можете найти имя последнего с помощью стандартного приложения: «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... 

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

  

От 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); } } 
  • Как определить, отображается ли программная клавиатура на устройстве Android?
  • Android-эмулятор не смог выделить память 8
  • Вызвано: android.os.NetworkOnMainThreadException
  • Пользовательская строка заголовка без дополнения (Android)
  • INSTALL_FAILED_UPDATE_INCOMPATIBLE, когда я пытаюсь установить скомпилированный .apk на устройство
  • Сделать приложение-волшебник на Android-устройстве
  • Как получить основной адрес электронной почты устройства Android
  • Android: Как открыть конкретную папку через Intent и показать ее содержимое в файловом браузере?
  • Простой пример сетки Android, использующий RecyclerView с GridLayoutManager (например, старый GridView)
  • Каталог данных не имеет права на чтение и запись в Android
  • Использование компьютера Windows в качестве устройства ввода Bluetooth для другого компьютера / устройства
  • Interesting Posts

    Установка и использование переменной в той же командной строке в Windows cmd.exe

    Внедрить слайд-шоу / карусель только для CSS с помощью следующих и предыдущих кнопок?

    Visual Studio 2010 не удается установить с помощью «Ошибка при установке»

    Как извлечь группы чисел из строки в vba

    Выполнение анонимного блока pl / sql и получение набора результатов в java

    Является ли светодиодный монитор лучше для глаз, чем ЖК-монитор?

    Нарушение синтаксиса строки электронной почты Outlook 2010 для встроенных ответов

    Spring Scheduled Task работает в кластерной среде

    Что такое «собственная сторона» в сопоставлении ORM?

    Есть ли способ получить все пары имени / значения querystring в коллекции?

    Удаленный рабочий стол оставляет хозяина невосприимчивым

    Как я могу сделать анимацию Java Swing более гладкой

    Получить значение удаленного реестра

    Как вы захватываете stderr, stdout и код выхода одновременно, в Perl?

    Почему не влияет процентная нагрузка / маржа на элементы Flex в Firefox и Edge?

    Давайте будем гением компьютера.