читать из текстового файла в андроиде

Я новичок в разработке Android и пытаюсь создать простое приложение, которое считывает некоторые данные из текстового файла и отображает их в ListView. Проблема в том, что мой ридер не находит мой файл. Я отладил свое приложение и пришел к такому выводу. Итак, где должен быть размещен текстовый файл, чтобы читатель мог его найти? Вот код:

     try
    {
          FileInputStream fstream = new FileInputStream("movies.txt");
          DataInputStream in = new DataInputStream(fstream);
          BufferedReader br = new BufferedReader(new InputStreamReader(in));

          String strLine;

          while ((strLine = br.readLine()) != null)
          {
              filme.add(strLine);
              Log.d(LOG_TAG,"movie name:" + strLine);
          }
          in.close();
    }
    catch (Exception e)
    {
                System.err.println("Error: " + e.getMessage());
    }

Спасибо!


person malutan.mircea    schedule 29.08.2012    source источник
comment
Где вы храните свой текстовый файл?   -  person VendettaDroid    schedule 29.08.2012
comment
Аналогично следующему: stackoverflow. com/questions/3344551/ и stackoverflow.com/questions/3316629/   -  person Joey    schedule 29.08.2012
comment
Ваш текстовый файл хранится в вашем приложении или во внешнем хранилище?   -  person    schedule 29.08.2012


Ответы (4)


Поместите файл с именем movie.txt в res/raw, затем используйте следующий код

String displayText = "";
try {
InputStream fileStream = getResources().openRawResource(
                    R.raw.movies);
int fileLen = fileStream.available();
// Read the entire resource into a local byte buffer.
byte[] fileBuffer = new byte[fileLen];
fileStream.read(fileBuffer);
fileStream.close();
displayText = new String(fileBuffer);
} catch (IOException e) {
  // exception handling
}
person dev_android    schedule 29.08.2012
comment
ОК, я создал свою необработанную папку в res, я проверил, что у меня нет импорта android.R, но теперь я получаю эту ошибку в следующей строке: InputStream fileStream = getResources().openRawResource( R.raw.фильмы); ОШИБКА: необработанный файл не может быть разрешен или не является файлом. - person malutan.mircea; 29.08.2012
comment
После его добавления файл должен отображаться в проводнике пакетов eclipse. При необходимости очистите проект один раз. Он должен автоматически создать объект R. И поэтому вы должны получить его в R.raw, точно так же, как любое изображение доступно в R.drawable. - person dev_android; 29.08.2012

FileInputStream fstream = new FileInputStream("movies.txt");

где путь к movie.txt?? Вы должны указать путь как SD-карту или внутреннюю память, где бы вы ни хранились.

Как будто на сд карте

 FileInputStream fstream = new FileInputStream("/sdcard/movies.txt");
person Daud Arfin    schedule 29.08.2012
comment
вы используете \ вместо / Он получит сообщение об ошибке, если воспользуется вашим ответом. - person ; 29.08.2012

Обычно, когда вы хотите открыть файл, вы помещаете его в папку res вашего проекта. Если вы хотите открыть текстовый файл, вы можете поместить его в каталог res/raw. Ваш плагин Android eclipse создаст для вас класс ресурсов, содержащий дескриптор вашего текстового файла.

Чтобы получить доступ к вашему файлу, вы можете использовать это в своей деятельности:

InputStream ins = getResources().openRawResource(R.raw.movies);

где «фильмы» — это имя вашего файла без типа файла.

person HashtagMarkus    schedule 29.08.2012

Если вы храните свои файлы на SD-карте, то вы можете получить корень SD-карты с помощью Environment.getExternalStorageDirectory().

Обратите внимание, что вы не сможете получить доступ к SD-карте, например, если она подключена к компьютеру.

Вы можете проверить состояние внешнего хранилища следующим образом:

boolean externalStorageAvailable = false;
boolean externalStorageWriteable = false;    

String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state)) {
    externalStorageAvailable = mExternalStorageWriteable = true;
} else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
    externalStorageAvailable = true;
    externalStorageWriteable = false;
} else {
    externalStorageAvailable = mExternalStorageWriteable = false;
}

if(externalStorageAvailable && externalStorageWriteable){
    File sdRoot = Environment.getExternalStorageDirectory();
    File myFile = new File(sdRoot, "path/to/my/file.txt");
}
person Adam Monos    schedule 29.08.2012