Android のファイルに関するネタを3つほどその第二弾です
次に, アプリケーションで生成したファイルをどこに保存してそして, 利用するかです。
アプリケーションで生成したファイルを保存する場所としては
1. アプリケーション領域
2. 内部ストレージ, SDカードなど外部ストレージ
3. クラウドなど, 外のマシン
まぁ, 3はおいておきまして...1,2の戦略をとります
1. アプリケーション領域
アプリケーション領域は, このアプリケーションで利用するためだけに使うための領域です
設定ファイルとか, 何かしらで必要なデータをここに入れておきます
ここへの書き込みや読み取り用Streamは, Context が専用のメソッドを用意してくれています
(サンプル2へ)
2. SDカードなど外部ストレージ
写真のデータや音楽など, 共有したり, 持ち出したりしたいファイルはここに入れます
サイズの大きいファイルもここの方がいいかもしれません。
○サンプル1(取得できるディレクトリなど)
File data = getFilesDir(); // Application Log.i("FilesDir", data.getAbsolutePath()); // External Storage File root = Environment.getRootDirectory(); Log.i("Environment root", root.getAbsolutePath()); File exterlStorage = Environment.getExternalStorageDirectory(); Log.i("Environment External", exterlStorage.getAbsolutePath()); File downloadCache = Environment.getDownloadCacheDirectory(); Log.i("Environment Download Cache", downloadCache.getAbsolutePath()); File dcim = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM); Log.i("DCIM", dcim.getAbsolutePath()); File alarms = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_ALARMS); Log.i("ALARMS", alarms.getAbsolutePath()); File downloads = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS); Log.i("DOWNLOADS", downloads.getAbsolutePath()); File movies = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MOVIES); Log.i("MOVIES", movies.getAbsolutePath()); File music = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC); Log.i("MUSIC", music.getAbsolutePath()); File notifications = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_NOTIFICATIONS); Log.i("NOTIFICATIONS", notifications.getAbsolutePath()); File pictures = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES); Log.i("PICTURES", pictures.getAbsolutePath()); File podcasts = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PODCASTS); Log.i("PODCASTS", podcasts.getAbsolutePath()); File ringtones = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_RINGTONES); Log.i("ROIGTONES", ringtones.getAbsolutePath());
○テストプログラムの結果です
・Emulator の場合 Android 4.0.3
FilesDir | /data/data/com.atmarkplant.forblog/files |
Environment root | /system |
Environment External | /mnt/sdcard |
Environment DownloadCache | /cache |
DCIM | /mnt/sdcard/DCIM |
ALARMS | /mnt/sdcard/Alarms |
DOWNLOADS | /mnt/sdcard/Download |
MOVIES | /mnt/sdcard/Movies |
NOTIFICATIONS | /mnt/sdcard/Notifications |
PICTURES | /mnt/sdcard/Notifications |
PODCASTS | /mnt/sdcard/Notifications |
NOTIFICATIONS | /mnt/sdcard/Notifications |
・Nexus7 SDカードなしの場合 Android 4.2.2
FilesDir | /data/data/com.atmarkplant.forblog/files |
Environment root | /system |
Environment External | /strage/emulated/0 |
Environment DownloadCache | /cache |
DCIM | /strage/emulated/0/DCIM |
ALARMS | /strage/emulated/0/Alarms |
DOWNLOADS | /strage/emulated/0/Download |
MOVIES | /strage/emulated/0/Movies |
NOTIFICATIONS | /strage/emulated/0/Notifications |
PICTURES | /strage/emulated/0/Notifications |
PODCASTS | /strage/emulated/0/Notifications |
NOTIFICATIONS | /strage/emulated/0/Notifications |
・Fujitsu F-10D の場合 Android 4.0.3
FilesDir | /data/data/com.atmarkplant.forblog/files |
Environment root | /system |
Environment External | /mnt/sdcard |
Environment DownloadCache | /cache |
DCIM | /mnt/sdcard/DCIM |
ALARMS | /mnt/sdcard/Alarms |
DOWNLOADS | /mnt/sdcard/Download |
MOVIES | /mnt/sdcard/Movies |
NOTIFICATIONS | /mnt/sdcard/Notifications |
PICTURES | /mnt/sdcard/Notifications |
PODCASTS | /mnt/sdcard/Notifications |
NOTIFICATIONS | /mnt/sdcard/Notifications |
やはり, SDCard スロットのない, Nexus 7 では, 内部のストレージ /strage/emulated/0 にある模様
adb コマンドで確認済み
○サンプル2(アプリケーション領域の読み書き)
private void write() { BufferedWriter bw = null; try { FileOutputStream os = openFileOutput("data.txt", MODE_PRIVATE); // Open file under application dir bw = new BufferedWriter(new OutputStreamWriter(os)); bw.write("Hello Japan!"); } catch ( Exception oops ) { oops.printStackTrace(); } finally { if ( bw != null ) { try { bw.close(); } catch ( IOException oops ) { oops.printStackTrace(); } } } } private void read() { BufferedReader br = null; try { FileInputStream is = openFileInput("data.txt"); br = new BufferedReader(new InputStreamReader(is)); String line; while( (line = br.readLine()) != null) { Log.i(TAG, line); } } catch ( Exception oops ) { oops.printStackTrace(); } finally { if ( br != null ) { try { br.close(); } catch ( IOException oops ) { oops.printStackTrace(); } } } }
この形で, ファイルの読み書きができますアプリケーション領域に関しては, 特別なメソッドが利用できます
メソッド | 内容 |
---|---|
openFileInput(String name) | ファイルの入力を取得FileInputStream |
openFileOutput(String name, int mode) | ファイルの出力を取得FileOutputStream) |
deleteFile(String name) | ファイルの削除 |
abstract String[] fileList() | ファイルリストの取得(パス) |
※File (java.io.File)のインスタンスが手に入れば, われわれJava 野郎のターンです。
mkdir, createTempFile とか, File クラスにまつわる
当然, サブディレクトリをつくることもできますし, そこにデータを置いとけます
0 件のコメント:
コメントを投稿