Как получить файл для чтения построчно

У меня есть файл, содержащий текст в отдельной строке.
Сначала я хочу отобразить строку, а затем, если я нажимаю кнопку, вторая строка должна отображаться в TextView и первая строка должна исчезнуть. Затем, если я нажму еще раз, должна появиться третья строка и так далее.

Должен ли я использовать TextSwitcher или что-нибудь еще? Как я могу это сделать?

3 ответа

Решение

Вы пометили его как "android-assets", поэтому я предполагаю, что ваш файл находится в папке assets. Вот:

InputStream in;
BufferedReader reader;
String line;
TextView text;

public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    text = (TextView) findViewById(R.id.textView1);
    in = this.getAssets().open(<your file>);
    reader = new BufferedReader(new InputStreamReader(in));
    line = reader.readLine();

    text.setText(line);
    Button next = (Button) findViewById(R.id.button1);
    next.setOnClickListener(this);
}

public void onClick(View v){
    line = reader.readLine();
    if (line != null){
        text.setText(line);
    } else {
        //you may want to close the file now since there's nothing more to be done here.
    }
}

Дайте это попробовать. Я не смог убедиться, что это работает полностью, но я считаю, что это общая идея, которой вы хотите следовать. Естественно, вы захотите заменить любой R.id.textView1/button1 с именами, которые вы указали в файле макета.

Также: здесь очень мало проверок на ошибки для экономии места. Вы хотите проверить, что ваш актив существует, и я уверен, что должно быть try/catch блокировать при открытии файла для чтения.

Редактировать: большая ошибка, это не R.layout , его R.id Я отредактировал свой ответ, чтобы исправить проблему.

Следующий код должен удовлетворить ваши потребности

try {
// open the file for reading
InputStream instream = new FileInputStream("myfilename.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;

  // read every line of the file into the line-variable, on line at the time
  do {
     line = buffreader.readLine();
    // do something with the line 
  } while (line != null);

}
} catch (Exception ex) {
    // print stack trace.
} finally {
// close the file.
instream.close();
}

Вы можете просто использовать TextView и ButtonView. Прочитайте файл с помощью BufferedReader, он предоставит вам хороший API для чтения строк по одной. При нажатии на кнопку просто измените текст просмотра текста с помощью settext.

Вы также можете прочитать все содержимое файла и поместить его в список строк, это может быть лучше, если ваш файл не слишком большой.

С уважением, Стефан

Другие вопросы по тегам