2016-08-15 12 views
0

新しいファイルのバイトの書き込みがtransactionnalyであることを保証するためのwayin JAVAがあるかどうかを知りたい。に書き込み、一時ファイルを作成しますファイルtransactionを書き込むにはどうすればいいですか?

public static boolean write(byte[] content, String filepath) { 
    File tmp = new File(filepath + ".tmp"); 
    try { 
     OutputStream out = new FileOutputStream(tmp); 
     out.write(content); 
     out.close(); 
     // At this point the file is correctly written 
     tmp.renameTo(new File(filepath)); 
     // Now the file is renamed to the final place 
     return true; 
    } catch (Exception e) { 
     tmp.delete(); 
    } 
    return false; 
} 

:例外が書き込み中に発生した場合

、ファイルは通常

おかげ

+6

一般的なやり方は、一時ファイルに書き込むことです。書き込みが成功したことがわかったら、一時ファイルを実際の場所に移動します。しかし、どちらのファイルも同じパーティションになければなりません。 – njzk2

+1

どのような環境ですか? Java EE?春のサービス?デスクトップ? – Puce

+0

'...ファイルを作成してはいけません。 ' - それは新しいファイルのためだけですか?その場合、ファイルを作成して後で削除するだけで、njzk2が言ったように、(隠された)一時ファイルを使用して、トランザクションが成功するまで表示または読み取られるのを防ぐためにコピー/移動を成功させることができます。 – Thomas

答えて

1

を作成してはいけません、あなたはそのような何かを行うことができますすべてが計画どおりになったら、ファイルの名前を変更します。

tmpファイルは最終ファイルと同じパーティションにあることが非常に重要であることに注意してください。移動は文字通り名前が変更されますが、そうでない場合はコピーと削除です。

+0

あなたの応答をありがとう – benyahia

+0

しかし、ファイルEnvのコピー中に接続が失敗した場合、宛先の大文字と小文字を管理するにはどうすればいいですか?Env:Java EE – benyahia

+0

ファイルを送信します。 – njzk2

関連する問題