1. Files.copy 与 Files.move 的原子性
Files.copy 与 Files.move 的原子性如何保证?各自有哪些注意事项?
- Files.copy 与 Files.move 的原子性
- StandardCopyOption 的语义
- 跨文件系统与同文件系统的差异
Files.copy 与 Files.move 的原子性取决于底层文件系统与操作。Files.move 在同一文件系统内通常基于 rename() 系统调用实现,是原子的(瞬间完成,不会出现中间状态);若指定 ATOMIC_MOVE 选项,则强制要求原子移动,若底层不支持则抛 AtomicMoveNotSupportedException。跨文件系统时,move 退化为复制+删除,不是原子的。Files.copy 默认不是原子的,它可能分多步复制(读一部分写一部分),复制过程中若中断会留下不完整文件;可配合 REPLACE_EXISTING 覆盖。注意事项:指定 ATOMIC_MOVE 时不能同时指定其他不完全兼容的选项;原子性依赖底层文件系统的支持(如 ext4 的 rename 原子,某些网络文件系统可能不同)。理解 copy 的非原子与 move 的同文件系统原子性是本题关键。
核心是 move 在同文件系统基于 rename 原子、跨文件系统复制+删除非原子;copy 非原子。理解原子性依赖与 ATOMIC_MOVE 选项是本题关键。