●ファイル処理


ファイルと言ってもアプリケーション自身が使うファイルしか読み書きできません。
自分自身の設定をちょっと保存しておくという感じのものでしょうか。

アプリケーションどうしの通信に使えたのは過去の話です。
かつては使えたMODE_WORLD_READABLEやMODE_WORLD_WRITEABLEは新しい端末では動作しませんので注意が必要です。

▽下のプログラムでは、エラー情報などを出力するために、Toastを使いました。
android.widget.Toast t=android.widget.Toast.makeText(this,"", android.widget.Toast.LENGTH_LONG);
よかったら追加してみてください。
また、getApplicationContext()の部分は自らのContextであり、thisに置き換えてもいいです。


■ファイル書き込み

android.content.Context.MODE_PRIVATE の部分を、
android.content.Context.MODE_APPEND にするとファイルに追記されます。

try {
    java.io.FileOutputStream fos= getApplicationContext().openFileOutput("FILENAME", android.content.Context.MODE_PRIVATE);
    String str = "abcdefg";
    fos.write(str.getBytes());
    fos.close();
}catch(Exception e){
    t.setText(e.toString());
    t.show();
}


■ファイル読み込み


try {
    java.io.FileInputStream fis = getApplicationContext().openFileInput("FILENAME");
    byte[] buffer = new byte[256];
    fis.read(buffer, 0, buffer.length);
    fis.close();
    String str = new String(buffer);
}catch(Exception e){
    t.setText(e.toString());
    t.show();
}


■ファイル削除


try {
    java.io.File file = getApplicationContext().getFileStreamPath("FILENAME");
    if (file.exists()){
        file.delete();
    }else{
        t.setText("ファイルが見つかりません");
        t.show();
    }
}catch(Exception e){
}


---------------------------------------------------------------------------
ココから下はかつては使えた(意味があった)機能です。
---------------------------------------------------------------------------

■ファイルの保存場所

ファイルの保存先パスを得る
android.os.Environment.getExternalStorageDirectory().getPath()+"/"+ getApplicationContext().getPackageName()

■他のアプリケーションからの読み込み(書き込み)権限を与える

java.io.File file = getApplicationContext().getFileStreamPath("FILENAME");
if(file.setReadable(true)){
    t.setText("読み込み権限OK");
    t.show();
}
if(file.setWritable(true)){
    t.setText("書き込み権限OK");
    t.show();
}

■他のアプリケーションのファイルを読み書きする場合


他のアプリケーションのandroid.content.Contextを取得してファイル操作を行います。
thisやgetApplicationContext()の自分自身のContextを取得する箇所を次のように変更するだけです。

createPackageContext("パッケージ名",0);


■ディレクトリ作成

ファイルの書き込み・読み込み先のディレクトリは次のように作成します。

String path = "/data/data/" + getApplicationContext().getPackageName();
java.io.File dir = new java.io.File(path);
if (!dir.exists()){
    dir.mkdir();
}
path = "/data/data/" + getApplicationContext().getPackageName() + "/files";
dir = new java.io.File(path);
if (!dir.exists()){
    dir.mkdir();
}
アプリケーションのパッケージ名でのディレクトリ/files/が作られていた場合には、その中にファイルが書き込み・読み込みができますが、
無かった場合にも書き込み・読み込みできます。
なんだか気持ち悪いので無かったらエラーの出る昔ながらの方法で書き込み・読み込みをしてみます。


■昔ながらのファイル書き込み

try {
    java.io.File file = new java.io.File("/data/data/"+getApplicationContext().getPackageName() + "/files/"+"FILENAME");
    java.io.FileWriter filewriter = new java.io.FileWriter(file);
    filewriter.write("testtext");
    filewriter.close();
}catch(Exception e){
    t.setText(e.toString());
    t.show();
}


■昔ながらのファイル読み込み

try {
    java.io.File file = new java.io.File("/data/data/"+getApplicationContext().getPackageName() + "/files/"+"FILENAME");
    java.io.FileReader filereader = new java.io.FileReader(file);
    StringBuffer sb=new StringBuffer();
    int c;
    while((c = filereader.read()) != -1){
        sb.append((char)c);
    }
    String str = sb.toString();
}catch(Exception e){
    t.setText(e.toString());
    t.show();
}


■昔ながらのファイル削除

try {
    java.io.File file =new java.io.File("/data/data/"+getApplicationContext().getPackageName() + "/files/"+"FILENAME");
    if (file.exists()){
        file.delete();
    }
}catch(Exception e){
    t.setText(e.toString());
    t.show();
}


▲トップページ > android