web-dev-qa-db-ja.com

ファイルを1行ずつ読み取る方法

別の行にテキストを含むファイルがあります。
最初に行を表示したいのですが、ボタンを押すと、2行目がTextViewに表示され、1行目が消えます。次に、もう一度押すと、3行目が表示されます。

TextSwitcherなどを使用する必要がありますか?どうやってやるの?

18
Sunny

「Androidアセット」というタグを付けたので、ファイルがアセットフォルダーにあると想定します。ここに:

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です問題を解決するために回答を編集しました。

31
Otra

次のコードはあなたのニーズを満たすはずです

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();
}
15
Ronnie

TextViewとButtonViewを使用するだけです。 BufferedReaderを使用してファイルを読み取ると、行を1つずつ読み取るニースAPIが提供されます。ボタンをクリックすると、settextを使用してテキストビューのテキストを変更するだけです。

また、すべてのファイルの内容を読み取って文字列のリスト内に配置することを検討することもできます。これは、ファイルが大きすぎない場合には、よりクリーンな場合があります。

よろしく、ステファン

0
Snicolas