Android: インターナル・ストレージ(ファイル)を利用するサンプル

インターナル・ストレージ(ファイル)を利用するサンプルです。
データストレージについては developer.android.com のData Storageが参考なります。ここにある説明と簡単なサンプルコードを参考にして書いてみました。
ファイルのデータを読み取る際の型変換は、他にも色々な書き方がありそうで、もっとうまい方法もありそうですが、"とりあえず動いた"のでアップします。

 [初期画面]  [文字列を書き込んだ後、読み出して表示]

[このサンプルについて]
・ファイルへの書き込みにはContextクラスのメソッド openFileOutput() を利用する。
・ファイルからの読み込みにはContextクラスのメソッド openFileInput() を利用する。
・ファイル名は hello_file
 このファイルはDDMSのファイル・エクスプローラー、あるいはadbコマンドで確認できます。

$ adb -e shell
# ls -l /data/data/jp.knowd.InternalStorageSample/files
-rw-rw---- app_48   app_48         30 2011-07-18 16:10 hello_file
# cat /data/data/jp.knowd.InternalStorageSample/files/hello_file
Hello Linux!!
Hello Android!!

[サンプルのコード]
InternalStorageSample.java

package jp.knowd.InternalStorageSample;

import android.app.Activity;
import android.os.Bundle;
import java.io.FileOutputStream;
import android.content.Context;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.FileInputStream;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;

public class InternalStorageSample extends Activity {
    /** Called when the activity is first created. */
	
    //  Widget
    public TextView txtInfo1, txtInfo2;
    public EditText edtInput;
    public Button btn1, btn2, btn3;
    
    // for Internal Storage
    public String FILENAME = "hello_file";
    public String OutString;
    public FileOutputStream fos1 = null;
    public FileInputStream fos2 = null;     
	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        // レイアウトを作成
        LinearLayout layout = new LinearLayout(this);
        layout.setOrientation(LinearLayout.VERTICAL);
        setContentView(layout);
 
        // ラベル1
        txtInfo1 = new TextView(this);
        txtInfo1.setText("ファイルに書き込む文字列(英数字のみ)");
        layout.addView(txtInfo1);
                
        // エディタ
        edtInput = new EditText(this);
        layout.addView(edtInput);
        
        // ボタン1
        btn1 = new Button(this);
        btn1.setText("ファイル(hello_file)へ書く");
        layout.addView(btn1);
         
        // ボタン2
        btn2 = new Button(this);
        btn2.setText("ファイル(hello_file)を読む");
        layout.addView(btn2); 
                
        // ラベル2
        txtInfo2 = new TextView(this);
        layout.addView(txtInfo2);
        txtInfo2.setText("ここにファイルのデータが表示される");
         
        // ボタン1のイベントを設定 (書き込み)
        btn1.setOnClickListener(new OnClickListener(){
            public void onClick(View v) {
                String strInput = edtInput.getText().toString();
                try {	
                    fos1 = openFileOutput(FILENAME, Context.MODE_PRIVATE);     
                    } catch (FileNotFoundException e) {
                    e.printStackTrace();
                     }
                    
                try {
                    fos1.write(strInput.getBytes());
                    fos1.close();        
                    } catch (IOException e) {
                    e.printStackTrace();
                     }
             }
        });
         
        // ボタン2のイベントを設定 (読み出し/表示)
        btn2.setOnClickListener(new OnClickListener(){
            public void onClick(View v) {
                try {	
                    fos2 = openFileInput(FILENAME);     
                    } catch (FileNotFoundException e) {
                    e.printStackTrace();
                     }
                    
                try {
                	byte[] byteArray = new byte[100];
                	fos2.read(byteArray);
                	char[] charArray = new char[byteArray.length];
                	for (int i = 0; i < charArray.length; i++) {
                	    charArray[i] = (char) byteArray[i];
                	}
                	OutString = String.valueOf(charArray).toString();
                 fos2.close();        
                 } catch (IOException e) {
                 e.printStackTrace();
                  }
                 txtInfo2.setTextSize(18);
                 txtInfo2.setText(OutString);
            }
        });
    }
}