Android -ファイル-
ファイル
ファイルは、文字列や画像など、任意のデータを保存することができます。
保存先は、基本的にアプリごとに割り当てられたフォルダ「/data/data/パッケージ名/ファイル名」 となります。
ファイルに拡張子は付けても、付けなくても構いません。
ファイルの入出力には、例外処理が必須です。
データ保存(データの書き込み)
FileOutputStreamオブジェクトの取得
ContextクラスのopenFileOutput(String name, int mode)メソッドで取得します。
nameには、アクセスしたいファイル名、modeには、処理モードの定数を指定します。
処理モードの定数 | 説明 |
---|---|
MODE_APPEND | 既存のファイルに追加で書き込む |
MODE_PRIVATE | 他のアプリケーションからアクセス不可 |
MODE_WORLD_READABLE | 他のアプリケーションから読み込みは可能 |
MODE_WORLD_WRITEABLE | 他のアプリケーションから書き込みは可能 |
OutputStreamWriterオブジェクトの生成
書き込み処理を行う為にOutputStreamWriterオブジェクトの生成を行います。
OutputStreamWriterクラスの主なコンストラクタ |
---|
OutputStreamWriter(OutputStream out) |
BuffferedWriterオブジェクトの生成
効率的に出力する為に、BuffferedWriterオブジェクトの生成を行います。
BufferedWriter(Writer out) | BufferedWriter(Writer out, int size) |
void | close() | バッファに溜まっている出力データのファイル書き込み、 ファイルを閉じます。 |
void | newLine() | 改行 |
void | write(int oneChar) | 書き込みたいデータを文字列で渡してファイルに出力します。 |
データ取得(ファイルの読み込み)
FileOutputStreamオブジェクトの取得
ファイルからの読み込みは、FileInputStreamクラスを利用します。
ContextクラスのopenFileInput(String name)メソッドで取得します。
InputStreamReaderオブジェクトの生成
読み込み処理を行う為にInputStreamReaderクラスのオブジェクト生成を行います。
InputStreamReaderクラスの主なコンストラクタ |
---|
InputStreamReader(InputStream in) |
BufferedReaderオブジェクトの生成
効率的なデータ読み込みの為に、BufferedReaderオブジェクトの生成を行います。
BufferedReader(Reader in) | BufferedReader(Reader in, int size) |
void | close() | バッファに溜まっているデータを読み込み、ファイルを閉じます。 |
int | read() | バッファに読み込まれたデータを1文字ずつ読み込みます。 |
String | readLine() | バッファに読み込まれたデータを1行ずつ読み込みます。 |
データ削除
すべてのデータを削除する場合は、ContextクラスのdeleteFile(String name) メソッドを利用します。
ファイルのサンプル
FileEx
res/layout/main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginRight="10dp"
android:text="お名前:"
android:textSize="20sp" />
<EditText
android:id="@+id/edit_name"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginRight="30dp"
android:text="性別:"
android:textSize="20sp" />
<RadioGroup
android:id="@+id/radio_group"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checkedButton="@+id/rb1"
android:orientation="horizontal" >
<RadioButton
android:id="@+id/rb1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="男性" />
<RadioButton
android:id="@+id/rb2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="女性" />
</RadioGroup>
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<Button
android:id="@+id/btn_save"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="保存" />
<Button
android:id="@+id/btn_show"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="表示" />
<Button
android:id="@+id/btn_del"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="削除" />
</LinearLayout>
<TextView
android:id="@+id/text_res"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:gravity="center_horizontal"
android:textSize="20sp" />
</LinearLayout>
FileEx.java
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;
public class FileEx extends Activity implements OnClickListener {
//ファイル名
private static final String FILE_NAME = "test.txt";
// 改行コード
private static final String BR = System.getProperty("line.separator");
private RadioGroup rg;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button btnSave = (Button) findViewById(R.id.btn_save);
btnSave.setTag("save");
btnSave.setOnClickListener(this);
Button btnShow = (Button) findViewById(R.id.btn_show);
btnShow.setTag("show");
btnShow.setOnClickListener(this);
Button btnDel = (Button) findViewById(R.id.btn_del);
btnDel.setTag("del");
btnDel.setOnClickListener(this);
// ラジオグループオブジェクトの取得
rg = (RadioGroup) findViewById(R.id.radio_group);
}
@Override
public void onClick(View v) {
// タグの取得
String tag = (String) v.getTag();
// EditTextオブジェトの取得
EditText editName = (EditText) findViewById(R.id.edit_name);
// チェック済みのラジオボタンオブジェクトの取得
RadioButton rBtn = (RadioButton) findViewById(rg
.getCheckedRadioButtonId());
// TextViewの取得
TextView textRes = (TextView) findViewById(R.id.text_res);
// 表示用メッセージ
String message = "";
//ファイルの書き込み
if (tag.equals("save")) {
// ファイルにデータ保存
try {
//FileOutputStreamオブジェクトの取得
FileOutputStream out = openFileOutput(FILE_NAME, MODE_APPEND);
//BufferedWriter+OutputStreamWriterオブジェクト生成
BufferedWriter buf = new BufferedWriter(new OutputStreamWriter(out));
//入力されたデータの文字列連結
StringBuffer sb = new StringBuffer();
sb.append(editName.getText().toString());
sb.append(":");
sb.append(rBtn.getText().toString());
sb.append(BR);
//書き込みたいデータを文字列で渡してファイルに出力
buf.write(sb.toString());
//ファイルを閉じる(バッファメモリなどを解放)
buf.close();
//エディットテキストを空白
editName.setText("");
//ラジオボタンを男性にチェック
rg.check(R.id.rb1);
message = "データを保存しました";
} catch (Exception e) {
message = "保存に失敗しました";
}
//ファイルの読み込み
} else if (tag.equals("show")) {
try {
//FileInputStreamオブジェクトの取得
FileInputStream in = openFileInput(FILE_NAME);
//BufferedReader+InputStreamReaderオブジェクト生成
BufferedReader buf = new BufferedReader(new InputStreamReader(in));
StringBuffer sb = new StringBuffer();
String line = "";
//データの最後まで1行ずつ読み込みして文字列連結
while ((line = buf.readLine()) != null) {
sb.append(line);
sb.append(BR);
}
message = sb.toString();
//ファイルを閉じる(バッファメモリなどを解放)
buf.close();
} catch (Exception e) {
message = "データは存在しません";
}
//ファイル削除
} else if (tag.equals("del")) {
try {
//ファイルのデータ削除
deleteFile(FILE_NAME);
message = "データを削除しました";
} catch (Exception e) {
message = "データ削除に失敗しました";
}
}
textRes.setText(message);
}
}