ファイルアクセスチュートリアル

基本

Androidではjava.ioパッケージの標準ioが使用できるので特に難しいことはない。しかし、以下は注意すべきである。

書き込みの例

Preferenceでやった様にエディットコントロールに入力された内容をファイルに保存して、起動されたときに読み込むアプリケーションを作ってみよう。

Contextクラスの各メソッドが使われるのが分かるだろう。fileListメソッドで自アプリケーション用のディレクトリのファイルリストを取得、openFileInputメソッドでファイルを読み込みオープン(InputFileStreamクラスのインスタンスが返される)、openFileOutputメソッドでファイルを書き込みオープン(OutputFileStreamクラスのインスタンスが返される)

package com.suddenAngerSytem;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

import android.app.Activity;
import android.os.Bundle;
import android.widget.EditText;

public class FileAccess extends Activity {
	final static String FILE_NAME = "save_edit.txt";
	final static int EDIT_ID = 1000;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        //自アプリケーション用のディレクトリにあるファイルリストを取得
        final String[] strArray = fileList();
        String edittingString = "";
        //ファイルがあるかを確認
        for(String str : strArray) {
        	if(str.equals(FILE_NAME)) {
        		try {
        			//ファイルがある場合は読み込み。
        			BufferedReader reader = new BufferedReader(new InputStreamReader(openFileInput(FILE_NAME)));
        			edittingString = reader.readLine();
        			reader.close();
        		}
        		catch(Exception e) {
        			//サンプルなのでエラーハンドリングしない。
        		}
        	}
        }

        EditText edit = new EditText(this);
        edit.setText(edittingString);
        edit.setId(EDIT_ID);
        setContentView(edit);
    }

    //アクティビティがアクティブで無くなる際にファイルへ書き込む
    protected void onPause() {
    	super.onPause();
    	try {
    		BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(openFileOutput(FILE_NAME, MODE_PRIVATE)));
    		EditText edit = (EditText)findViewById(EDIT_ID);
    		writer.write(edit.getText().toString());
    		writer.close();
    	}
    	catch(Exception e) {
    		//サンプルなのでエラーハンドリングしない
    	}
    }
}
	

SDカードへのアクセス

SDカードへのアクセスも自アプリケーション用のディレクトリへのアクセスと変わらないが、エミュレータ上でSDカードを作成しないと確認できないため、説明する。

SDカードを作成するにはAndroidのSDKをインストールしたディレクトリの下のtoolsディレクトリで"mksdcard サイズ SDカードイメージファイル名"を実行する。

次にエミュレートする端末にSDカードを設定してやる。まずはAVD Managerを起動する

AVD Managerを起動したらSDカードに作成したSDカードイメージファイル名を設定して、AVDを作成する。

次に実行の構成を選択して、アプリケーションの起動設定を編集する

実行構成ダイアログでターゲットタブを選択し、作成したAVDを選択する。

実行をすると新しいエミュレータが立ち上がる。(ウインドウのタイトルにAVD名が表示される)

SDカードは/sdcardにマウントされ、/sdcard/xxxにアクセスできるようになる。