0

fileA と fileB があり、それらを交換したいと考えています。(コンピュータプログラミングでは、2 つの変数を交換する行為は、変数の値を相互に交換することを指します)

File fileA, fileB, temp
fileA.renameTo(temp);
try {
    fileB.renameTo(fileA);
    try {
      // process fileA, B
    } finally {
        fileA.renameTo(fileB);
    } 
} finally {
    temp.renameTo(fileA);
}

「ハードウェア」スワップ操作がある場合は、一時ファイルと名前のペアを避けます。

4

1 に答える 1

1

一般に、「アトミック」ファイル スワップ操作の概念はありません。あったとしても、ファイルシステムに依存します。「一般的な」ファイルシステム (FAT*、ext*、NTFS など) がアトミックスワップ操作をサポートしているとは思えません。

確かに、アトミック操作は Java では使用できません。たとえそうだとしても、ファイルシステムなどを越えて動作することは決してありません.

あなたが探しているのは、Java が実行されるさまざまなサポート対象プラットフォームで保証されないという理由だけで、Java に居場所を見つけられないタイプのものです。

ファイルをロックして temp を使用することは、比較的確実なスワップ操作を行う唯一の方法です。

于 2013-09-17T20:10:06.137 に答える