android-ファイルの読み書き



ファイルアクセス


androidでは、プログラムがファイルを保存・利用できる場所が厳格に決められており、許可されていない場所でのファイル操作はアクセスエラーとなります。

Activityに用意されているメソッド(「openFileInput」や「openFileOutput」)を使うことで、FileInputStream/FileOutputStreamを取得して、自動的に保存可能な場所にファイルを保存することができます。


SDカードに保存する場合にはファイルパスを「/sdcard」とし、AndroidManifest.xmlにアクセス許可を記述します。

<uses-permission
    android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

下記では、本体にファイルを保存します。


main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:textSize="20sp"
    >
    <EditText
        android:id="@+id/edit"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:lines="5"
        />
    <Button
        android:id="@+id/load"
        android:text="@string/load_label"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        />
    <Button
        android:id="@+id/save"
        android:text="@string/save_label"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        />
</LinearLayout>

string.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="load_label">読み込み</string>
    <string name="save_label">書き出し</string>
    <string name="app_name">SampleApp</string>
</resources>

ソースコード

 package com.rsn.android.basictest;

import java.io.*;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.text.Editable;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;

public class BasicTestActivity extends Activity {
    private EditText edit;
    private String filename = "data1.txt";
    
    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        setContentView(R.layout.main);
        
        edit = (EditText) this.findViewById(R.id.edit);
        Button load = (Button) this.findViewById(R.id.load);
        load.setOnClickListener(new MyLoadAdapter());
        Button save = (Button) this.findViewById(R.id.save);
        save.setOnClickListener(new MySaveAdapter());
    }

    // 読込イベントクラス
    class MyLoadAdapter implements OnClickListener {
        public void onClick(View v) {
            try {
                loadText();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    // 保存イベントクラス
    class MySaveAdapter implements OnClickListener {
        public void onClick(View v) {
            Editable s = edit.getText();
            try {
                saveText(s.toString());
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    // テキストの保存
    public void saveText(String data) throws IOException {
        FileOutputStream output = this.openFileOutput(filename,    Context.MODE_WORLD_READABLE);
        output.write(data.getBytes());
        output.close();
    }

    // テキストの読込
    public void loadText() throws IOException {
        FileInputStream input = this.openFileInput(filename);
        byte[] buffer = new byte[input.available()];
        input.read(buffer);
        String s = new String(buffer).trim();
        edit.setText(s);
        input.close();
    }
}


関連

android





スポンサード リンク