LoginSignup
24
24

More than 5 years have passed since last update.

安全にファイルを操作する

Last updated at Posted at 2014-08-14

AtomicFile

API level 17からファイルを安全に操作するための仕組みとしてAtomicFileが導入された。
これは書き込み開始時に元ファイルをバックアップし、失敗時にはロールバックすることでファイルの破損を防ぐ仕組みだ。
SupportLibraryにもr11から追加されているため、古い機種でも利用することができる。
http://developer.android.com/reference/android/support/v4/util/AtomicFile.html

メソッド

openRead

ファイル読み込みのためのFileInputStreamを取得する
前回のバックアップファイルが残っている場合、不正終了とみなして自動的にロールバックする

readFully

openReadした内容をbyte[]で取得する

startWrite

ファイルの編集を行うためのFileOutputStreamを生成する
元ファイルが存在する場合はバックアップを生成する

finishWrite

ファイルの操作成功時に呼び出すメソッド
バックアップファイルを削除する
引数のFileOutputStreamは内部でcloseされる

failWrite

ファイルの操作失敗時に呼び出すメソッド
バックアップファイルからロールバックを行う
引数のFileOutputStreamは内部でcloseされる

delete

元ファイル、バックアップファイルの両方を削除する
この処理ではstartWriteは必須ではない

getBaseFile

元ファイルのFileを返す

実装

AtomicFile atomicFile = new AtomicFile(getFileStreamPath(FILENAME));
FileOutputStream fos = null;
try {
    // 書き込み開始
    fos = atomicFile.startWrite();

    fos.write(...);

    // 書き込み成功
    atomicFile.finishWrite(fos);
} catch (IOException ex) {
    // 書き込み失敗
    atomicFile.failWrite(fos);
}

補足

バックアップ処理は元ファイル名の末尾に.bakをつけたパスにrenameToしているようだ。
容量は食わないがコピーしているわけではないので、startWriteした後に元ファイルを参照したりしないように注意すること。

24
24
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
24
24