ホーム >  Android > ファイル

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オブジェクトの生成を行います。

BuffferedWriterクラスの主なコンストラクタ
BufferedWriter(Writer out) BufferedWriter(Writer out, int size)

BuffferedWriterクラスの主なメソッド
void close() バッファに溜まっている出力データのファイル書き込み、
ファイルを閉じます。
void newLine() 改行
void write(int oneChar) 書き込みたいデータを文字列で渡してファイルに出力します。

データ取得(ファイルの読み込み)

FileOutputStreamオブジェクトの取得

ファイルからの読み込みは、FileInputStreamクラスを利用します。

ContextクラスのopenFileInput(String name)メソッドで取得します。

InputStreamReaderオブジェクトの生成

読み込み処理を行う為にInputStreamReaderクラスのオブジェクト生成を行います。

InputStreamReaderクラスの主なコンストラクタ
InputStreamReader(InputStream in)

BufferedReaderオブジェクトの生成

効率的なデータ読み込みの為に、BufferedReaderオブジェクトの生成を行います。

BufferedReaderクラスの主なコンストラクタ
BufferedReader(Reader in) BufferedReader(Reader in, int size)

BufferedReaderクラスの主なメソッド
void close() バッファに溜まっているデータを読み込み、ファイルを閉じます。
int read() バッファに読み込まれたデータを1文字ずつ読み込みます。
String readLine() バッファに読み込まれたデータを1行ずつ読み込みます。

データ削除

すべてのデータを削除する場合は、ContextクラスのdeleteFile(String name) メソッドを利用します。

ファイルのサンプル

file1

file2

file3

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

  }
}