このディレクトリの特徴として以下の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文入りのソースコードに修正しておきます。