Как писать и читать из текстового файла в Android? - PullRequest
1 голос
/ 06 ноября 2011

Я разрабатываю приложение для словаря.В приложении есть кнопка «Избранное», которая позволяет пользователям:

  • коротко щелкнуть, чтобы добавить просматриваемое слово в список избранного;
  • долго щелкнуть, чтобы просмотреть избранноесписок (добавленных слов).

До сих пор я кодировал следующее:

ОБНОВЛЕННЫЙ КОД:

//Writing lines to myFavourite.txt
    btnAddFavourite = (ImageButton) findViewById(R.id.btnAddFavourite);
    btnAddFavourite.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // Writing the content
                try {
                // opening myFavourite.txt for writing
                  OutputStreamWriter out = new OutputStreamWriter(openFileOutput("myFavourite.txt", MODE_APPEND));
                // writing the ID of the added word to the file
                  out.write(mCurrentWord);  
                // closing the file
                  out.close();
                } catch (java.io.IOException e) {
                  //doing something if an IOException occurs.
                }
                Toast toast = Toast.makeText(ContentView.this, R.string.messageWordAddedToFarvourite, Toast.LENGTH_SHORT);
                toast.show();
            }
        });

    //Reading lines from myFavourite.txt
    btnAddFavourite.setOnLongClickListener(new View.OnLongClickListener() {         

            @Override
            public boolean onLongClick(View v) {

             //trying opening the myFavourite.txt
               try {
             // opening the file for reading
                InputStream instream = openFileInput("myFavourite.txt");

             // if file the available for reading
                if (instream != null) {
            // prepare the file for reading
                InputStreamReader inputreader = new InputStreamReader(instream);
                BufferedReader buffreader = new BufferedReader(inputreader);

            String line;

            // reading every line of the file into the line-variable, on line at the time
            try {
                while ((line = buffreader.readLine()) != null) {
                  // do something with the settings from the file
                }
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

          }

          // closing the file again
          try {
            instream.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        } catch (java.io.FileNotFoundException e) {

          // ding something if the myFavourite.txt does not exits
        }
        return false;

        }});
        }

Однакокнопка «Избранное» не работает с указанными выше строками кода.

Файл myFavourite.txt завершает работу (в data / data / my_project / files в Eclipse), но содержит только одну недавнодобавлено слово.Кроме того, приложение принудительно закрывается при длительном нажатии кнопки «Избранное».

Что я делал не так?Я очень благодарен, если вы, ребята, можете помочь мне решить эту проблему.Большое спасибо.

========

РЕДАКТИРОВАТЬ

Большое спасибо за вашу помощь.Я обновил свой код, чтобы отразить ваши комментарии и подсказки.К настоящему времени произошли некоторые улучшения: Избранные слова были записаны в файл myFavourite.txt подобно word2 word2 word3 ... (хотя я хочу, чтобы они появлялись в новых строках).

Однако список избранных по-прежнему не загружается при длительном нажатии кнопки «Избранное».

На самом деле моя цель - сделать так, чтобы в приложении можно было загрузить список избранного и позволить пользователям выбирать слова для поиска.

Большое спасибо за вашу помощь.

Ответы [ 2 ]

1 голос
/ 06 ноября 2011

В этой строке

OutputStreamWriter out = new OutputStreamWriter(openFileOutput("myFavourite.txt",0));

Файл перезаписывается, если он уже существует при каждом создании потока.Что вы хотите сделать, это передать MODE_APPEND вместо 0. Посмотрите на документацию .

Что касается длинных кликов, эти строки

if (instream) {

while (( line = buffreader.readLine())) {

Не должен даже компилироваться.То, что вы хотите, это, вероятно, что-то вроде

if (instream.ready()) {

и

while ((line = buffreader.readLine()) != null) {
    // Use this line
}
0 голосов
/ 06 ноября 2011

Посмотрите этот пример, который прост для чтения текстового файла в Android.

* ** 1003 тысяча два * Пример

файл должен храниться в.

res / raw / myFavourite.txt.

То же, что и ваша проблема. Как прочитать текстовый файл с SD-карты в Android?

Еще один простой учебник. Как читать текстовый файл. http://android -er.blogspot.com / 2010/07 / дисплей-текст-файл-в-resraw_01.html

...