[Android]外部ストレージのパブリックディレクトリに読み書きを行う | 妄想プログラマのらくがき帳

2013年1月28日月曜日

[Android]外部ストレージのパブリックディレクトリに読み書きを行う

内部ストレージや外部ストレージのアプリPrivate領域に保存したファイルは、
アプリのアンインストール時に全て削除されます。
しかし、カメラで撮影した写真(画像ファイル)やエディタで編集したテキストファイル等は
アプリをアンインストールしても残しておきたいファイルです。
そんなファイルを保存するためのディレクトリが外部ストレージのパブリックディレクトリです。

外部ストレージのパブリックディレクトリにファイルを作成し、データを保存する

外部ストレージのパブリックディレクトリにファイルを作成し、データを書き込むコードは以下のようになります。
※コードでは前回同様http://developer.android.com/training/basics/data-storage/files.htmlにあるisExternalStorageWritable()とisExternalStorageReadable()を使ってます。
// 外部ストレージに書き込み可能かチェック
if (isExternalStorageWritable()) {
 FileOutputStream outputStream;
 
 // ※以下、例外処理は省略

 // パブリックディレクトリにファイルを作成し、書き込む。 
 File file = new File(
     Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS),
     "myfile.txt");

 outputStream = new FileOutputStream(file);

 outputStream.write("test".getBytes());
 
 // ちなみにDDMSで確認したところ、確認時の環境下では
 // "/mnt/sdcard/Download/myfile.txt"
 // に書き込まれた。
 
 outputStream.close();
}
アプリPrivate領域に保存する時との違いは、getExternalFilesDir()ではなくEnvironment.getExternalStoragePublicDirectory()を使う点です。
Environment.getExternalStoragePublicDirectory()の引数に指定するディレクトリのタイプは、getExternalFilesDir()と同じです。

外部ストレージのパブリックディレクトリに保存したファイルからデータを読み込む

ファイルからデータを読み込むコードは以下のようになります。
// 外部ストレージから読み込み可能かチェック
if (isExternalStorageReadable()) {
 FileInputStream inputStream;
 byte[] buffer = new byte[256];

 // ※以下、例外処理は省略
 
 File file = new File(
     Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS),
     "myfile.txt");

 if (file.exists()) {
  inputStream = new FileInputStream(file);
  inputStream.read(buffer);

  String data = new String(buffer, "UTF-8");

  inputStream.close();
 }
}
こちらもgetExternalFilesDir()ではなくEnvironment.getExternalStoragePublicDirectory()を使う点が異なるだけです。

0 件のコメント:

コメントを投稿