0

我有 fileA 和 fileB 并想交换它们。(在计算机编程中,交换两个变量的行为是指相互交换变量的值

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 回答