このディレクトリの特徴として以下の3点が挙げられます。
- アプリのprivate領域にある
- 内部ストレージが不足状態になると、このフォルダ内のデータはシステムによって削除される可能性がある
- キャッシュファイルはアプリのアンインストール時に削除される
キャッシュディレクトリにファイルを作成し、データを保存する
キャッシュディレクトリにファイルを作成し、データを書き込むコードは以下のようになります。
FileOutputStream outputStream = null; try { // キャッシュ領域にファイルを作成し、書き込む。 File file = new File(getCacheDir(), "cache.txt"); file.createNewFile(); if (file.exists()) { outputStream = new FileOutputStream(file); outputStream.write("test".getBytes()); // ちなみにDDMSで確認したところ、確認時の環境下では // "/data/data/[パッケージ名]/cache/cache.txt" // に書き込まれた。 } } catch (IOException e) { Log.e("MyApp", "exception", e); } finally { try { if(outputStream != null) { outputStream.close(); } } catch (IOException e){ Log.e("MyApp", "exception", e); } }
キャッシュディレクトリに保存したファイルからデータを読み込む
ファイルからデータを読み込むコードは以下のようになります。
FileInputStream inputStream = null; byte[] buffer = new byte[256]; try { File file = new File(getCacheDir(), "cache.txt"); if (file.exists()) { inputStream = new FileInputStream(file); inputStream.read(buffer); String data = new String(buffer, "UTF-8"); } }catch (IOException e) { Log.e("MyApp", "exception", e); }finally { try { if(inputStream != null) { inputStream.close(); } } catch (IOException e) { Log.e("MyApp", "exception", e); } }
キャッシュディレクトリに保存したファイルを削除する
ファイルの削除はFileオブジェクトのdelete()を使います。
File file = new File(getCacheDir(), "cache.txt"); file.delete();
※2015/7/5 五嶋さんのコメントを受け、書き込み、読み込みのコードにtry-catch文を追加しました。
Eclipseに上記のままコピペしたらエラーになりました...
返信削除どのような状況で使えば良いのでしょうか?
どのようなエラーが出ているか教えていただけますでしょうか?
削除上記記事を作成したときの環境で確認しましたがエラーとなりませんでした。AndroidまたはJavaのバージョンが原因となっている可能性もありますし、エラーの内容を確認した後に改めて調査いたします。
try-catch文があったほうが良いですね〜
返信削除ご指摘ありがとうございます。
削除記事作成時は例外処理が入るとわかりにくいかな~と思って省略した気がするんですが、
try-catch文が入ったからといってわかりにくくなるものでもないですね(^^ゞ
近いうちにtry-catch文入りのソースコードに修正しておきます。