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