▼Androidメモ▼
ファイルの読み書き


ファイルの読み書きを行うプログラムを作成する。保存先は「/data/data/パッケージ名/files/」。


フォルダパスの取得
メソッド 取得パスの例(NexusS)
file=context.getFilesDir() /data/data/net.npaka.fileex/files
file=Environment.getDataDirectory(); /data
file=Environment.getDownloadCacheDirectory(); /cache
file=Environment.getExternalStorageDirectory(); /mnt/sdcard
file=Environment.getRootDirectory(); /system

ソースコード
FileEx.java
package net.npaka.fileex;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;

//ファイルの読み書き
public class FileEx extends Activity 
    implements View.OnClickListener {
    public final static int WC=LinearLayout.LayoutParams.WRAP_CONTENT;
    public final static int FP=LinearLayout.LayoutParams.FILL_PARENT;
    private EditText editText;
    
    //ボタンの生成
    private Button makeButton(String text,String tag) {
        Button button=new Button(this);
        button.setText(text);
        button.setTag(tag);
        button.setLayoutParams(new LinearLayout.LayoutParams(WC,WC));
        button.setOnClickListener(this);    	
        return button;
    }
    
    //アプリの初期化
    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        requestWindowFeature(Window.FEATURE_NO_TITLE);

        //レイアウトの生成
        LinearLayout layout=new LinearLayout(this);
        layout.setBackgroundColor(Color.rgb(255,255,255));
        layout.setOrientation(LinearLayout.VERTICAL);
        setContentView(layout);            
        
        //エディットテキストの生成
        editText=new EditText(this);
        editText.setText("",EditText.BufferType.NORMAL);
        editText.setLayoutParams(new LinearLayout.LayoutParams(FP,WC));
        layout.addView(editText);

        //ボタンの生成
        layout.addView(makeButton("書き込み","write"));
        layout.addView(makeButton("読み込み","read"));
    }

    //ボタンクリック時に呼ばれる
    public void onClick(View v) {
        String tag=(String)v.getTag();
        //ファイルへの書き込み
        if (tag.equals("write")) {
            try {
                String path=this.getFilesDir()+"/test.txt";
                String str=editText.getText().toString();
                data2file(str.getBytes(),path);
            } catch (Exception e) {
                showDialog(this,"エラー","書き込み失敗しました ");
            }            
        } 
        //ファイルからの読み込み
        else  if (tag.equals("read")) {
            try {
                String path=this.getFilesDir()+"/test.txt";
                String str=new String(file2data(path));
                editText.setText(str,TextView.BufferType.EDITABLE);        
            } catch (Exception e) {
                showDialog(this,"エラー","読み込み失敗しました ");
            }            
        }
    }     
    
    //バイトデータ→ファイル
    private void data2file(byte[] w,String fileName) 
        throws Exception {
        FileOutputStream fos=null;
        try {
            fos=new FileOutputStream(fileName);
            fos.write(w);
            fos.close();
        } catch (Exception e) {
            if (fos!=null) fos.close();
            throw e;
        }
    }

    //ファイル→バイトデータ
    private byte[] file2data(String fileName) 
        throws Exception {
        int size;
        byte[] w=new byte[1024];
        FileInputStream fin=null;
        ByteArrayOutputStream out=null;
        try {
            fin=new FileInputStream(fileName);
            out=new ByteArrayOutputStream();
            while (true) {
                size=fin.read(w);
                if (size<=0) break;
                out.write(w,0,size);
            }
            fin.close();
            out.close();
            return out.toByteArray();
        } catch (Exception e) {
            try {
                if (fin!=null) fin.close();
                if (out!=null) out.close();
            } catch (Exception e2) {
            }
            throw e;
        }
    }
    
    //ダイアログの表示
    private static void showDialog(final Activity activity,String title,String text) {
        AlertDialog.Builder ad=new AlertDialog.Builder(activity);
        ad.setTitle(title);
        ad.setMessage(text);
        ad.setPositiveButton("OK",new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog,int whichButton) {
                activity.setResult(Activity.RESULT_OK);
            }
        });
        ad.create();
        ad.show();
    }
}



−戻る−