2010年9月12日日曜日

Android ファイルの入出力(filesフォルダ)

Androidではデータベースと同じくファイルも、アプリケーション毎に管理され、他のアプリケーションからは直接操作できません。
ファイルは「data/data/<パッケージ名>/files/」に作成され、このフォルダのファイルを読み込めます。

書き込みには出力用ストリーム(OutputStream)のインスタンスを、openFileOutput()メソッドで取得します。
OutputStream openFileOutput(String fileName, int mode)
引数
fileName:ファイル名を指定します。ファイルパスは含めません。
mode:操作モードを指定します。
MODE_APPEND 既存ファイルの最後に追加書き込み
MODE_PRIVATE 他のアプリからはアクセス不可
MODE_WORLD_READABLE 他のアプリからの読み込み可能
MODE_WORLD_WRITABLE 他のアプリからの書き込み可能


読み込みには入力用ストリーム(InputStream)のインスタンスを、openFileInput()メソッドで取得します。
InputStream openFileInput(String fileName)
引数
fileName:ファイル名を指定します。ファイルパスは含めません。





サンプルコード

MainActivity.java
package my.study.android;  

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
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.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {

    /* WriteボタンClickリスナー */
    private OnClickListener buttonWrite_OnClickListener = new OnClickListener(){
        public void onClick(View v) {buttonWrite_OnClick(v);}};
    /* ReadボタンClickリスナー */
    private OnClickListener buttonRead_OnClickListener = new OnClickListener(){
        public void onClick(View v) {buttonRead_OnClick(v);}};
 
    /*
     * onCreate
     */
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        //Writeボタン
        Button btnWrite = (Button)this.findViewById(R.id.btnWrite);
        btnWrite.setOnClickListener(buttonWrite_OnClickListener);
        //Readボタン
        Button btnRead = (Button)this.findViewById(R.id.btnRead);
        btnRead.setOnClickListener(buttonRead_OnClickListener); 
    } 
 
    /*
     * Writeボタン処理
     */
    private void buttonWrite_OnClick(View v){
        String filename = "AndroidStudy.txt";
  
        OutputStream os = null;
        BufferedWriter bw = null;
        try{
            try {       
                os = this.openFileOutput(filename, MODE_PRIVATE);
                bw = new BufferedWriter(new OutputStreamWriter(os));
    
                bw.append("1行目" + "\n");  
                bw.append("2行目" + "\n");  
    
                bw.flush();
    
            } finally {
                bw.close();
            }
        } catch (IOException e) {
            Toast.makeText(this, "書き込み失敗", Toast.LENGTH_SHORT).show();
        }    
    }
 
    /*
     * ReadボタンClick処理
     */
    private void buttonRead_OnClick(View v){
        String filename = "AndroidStudy.txt";
  
        InputStream is = null;
        BufferedReader br = null;
  
        StringBuilder sb = new StringBuilder(); 
        try{
            try {
                is = this.openFileInput(filename);
                br = new BufferedReader(new InputStreamReader(is)); 
     
                String str;   
                while((str = br.readLine()) != null){   
                    sb.append(str +"\n");  
                }    
            } finally {
                br.close();
            }
        } catch (IOException e) {
            Toast.makeText(this, "読み込み失敗", Toast.LENGTH_SHORT).show();
        }
        TextView label = (TextView)this.findViewById(R.id.label);
        label.setText(sb.toString());
    }

}

main.xml(MainActivityのレイアウト)
<?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"
    >

<TextView 
    android:layout_width="wrap_content" android:layout_height="wrap_content" 
 android:id="@+id/label">
</TextView>

<Button 
    android:layout_width="wrap_content" android:layout_height="wrap_content" 
 android:text="Write" android:id="@+id/btnWrite">
</Button>
 
<Button 
    android:layout_width="wrap_content" android:layout_height="wrap_content" 
 android:text="Read" android:id="@+id/btnRead">
</Button>
 
</LinearLayout>

0 件のコメント: