SDカード上のファイルとしてデータを保存する。

Android 上で「SD カードへのデータ保存機能」を実装したい場合,SDカードの絶対パスにさえ注意すれば「ローカルファイルの読み書き」と同様のプログラムでいける。

前提:Manifest ファイルにおいて,パーミッション WRITE_EXTERNAL_STORAGE を与える。

以下にプログラムを示す。
(注)日本語を扱いたかったから "UTF-8" を指定しているが,本質的でない。

package jp.android.example;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

import jp.android.example.R;
import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.widget.EditText;

public class SDCardActivity extends Activity {
  //作成するファイル名
  private static final String MEMO_FILE="memo.txt";

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    //SDカード上のファイルのフルパスを定義する
    String sdcardPath = Environment.getExternalStorageDirectory().getPath();
    File file = new File(sdcardPath + "/" + MEMO_FILE);

    //SDカード上にファイルが存在する場合,そのファイルからデータを読み出す。
    if(file.exists()){
      try {
        //ファイル読み出しストリームの定義
        FileInputStream fis = new FileInputStream(file);
        BufferedReader reader = new BufferedReader(new InputStreamReader(fis, "UTF-8"));

        //EditText ビュー
        EditText et = (EditText)findViewById(R.id.edit_text);

        //UTF-8のテキストファイルを読みだして,EditText ビューへ貼りつける。
        String s;
        while((s = reader.readLine()) != null){
          et.append(s);
          et.append("\n");
        }
        reader.close();
      } catch(Exception e){
        e.printStackTrace();
      }
    }
  }

  //アクティビティのポーズ時にファイルを保存する
  protected void onPause() {
    super.onPause();

    //SDカード上のファイルのフルパスを定義する
    String sdcardPath = Environment.getExternalStorageDirectory().getPath();
    File file = new File(sdcardPath + "/" + MEMO_FILE);

    EditText et = (EditText)findViewById(R.id.edit_text);
    String s = et.getText().toString();
    if(s.length() == 0){
      //文字が入力されていなければファイルを削除
      file.delete();
      return;
    }

    try {
      //ファイル書き込みストリームの定義
      FileOutputStream fos = new FileOutputStream(file, false); //上書きモード
      BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(fos, "UTF-8"));

      writer.append(s);	//writer.write(s) でもよい。
      //writer.flush();
      writer.close();
    } catch(Exception e){
      e.printStackTrace();
    }
  }
}