Androidプログラマへの道 〜 Moonlight 明日香 〜 - ファイルから読み出す
コンテキスト(Context)クラスのopenFileInputメソッドからFileInputStreamインスタンスを取得し, これを利用することでファイルへの文字データまたはバイナリデータをファイルから読み込むことができる.

文字データをファイルから読み出す

ファイル(sample.txt)を読み出し, テキストビューに表示する.
    • openFileInputメソッドの引数にファイル名を指定して, FileInputStreamインスタンスを取得する.
    • BufferedReaderの内部にInputStreamWriterをラップしたBufferedReaderオブジェクトを生成する. BufferReaderを使用しなくてもファイルの読み込みは行えるが, readメソッドやreadLineメソッドが呼ばれるたびにファイルにアクセスするので効率がよくない.
    • readLineメソッドで1行読み出す.
    • closeメソッドでクローズする.
package com.moonlight_aska.android.fileread01;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.widget.TextView;

public class FireRead01 extends Activity {
  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) {
    final Context context = this;
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    TextView text = (TextView)findViewById(R.id.textview_id);
    BufferedReader in = null;
    try {
      FileInputStream file = context.openFileInput("sample.txt");
      in = new BufferedReader(new InputStreamReader(file));
      text.setText(in.readLine());
      in.close();
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}


バイナリデータをファイルから読み出す

バイナリデータのファイルを読み出し, 内容をダンプする.
    • openFileInputメソッドの引数にファイル名を指定して, FileInputStreamインスタンスを取得する.
    • BufferedInputStreamオブジェクトを生成する. BufferedInputStreamを使用しなくてもファイルの読み込みは行えるが, readメソッドが呼ばれるたびにファイルにアクセスするので効率がよくない.
    • readメソッドでバイナリデータをファイルから読み込む.
    • closeメソッドでクローズする.
package com.moonlight_aska.android.fileread02;

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;

public class FileRead02 extends Activity {
  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) {
    Context context = this;

    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    EditText edit = (EditText)findViewById(R.id.edittext_id);
    BufferedInputStream in = null;
    try {
      FileInputStream file = context.openFileInput("sample.bin");
      in = new BufferedInputStream(file);
      byte buf[] = new byte[256];
      in.read(buf, 0, 256);
      String str = null;
      for(int i=0; i<256; i++) {
        if(i % 5 == 4) {
          str = String.format("0x%02x\n", buf[i]);
        }
        else {
          str = String.format("0x%02x, ", buf[i]);
        }
        edit.append(str);
      }
      file.close();
    } catch(IOException e) {
      e.printStackTrace();
    }
  }
}