Java中的File.rename() - 它是一个原子操作吗?

时间:2011-05-24 15:21:11

标签: java linux unix file-rename atomicity

  

可能重复:
  How to atomically rename a file in Java, even if the dest file already exists?

我正在处理一个可能在工作中被杀的过程。我想重命名一个文件。 Java的重命名操作是原子操作吗?

我对Linux,HP-UX,Solaris和AIX感兴趣。

2 个答案:

答案 0 :(得分:0)

Rename操作可能是也可能不是原子操作,可能会也可能不会成功 如果一个文件或目录已存在于目标名称下。在Unix上有两个单独的操作 必须执行。首先必须测试目标名称下是否存在文件。然后,如果不存在此类文件,则可以继续将源文件重命名为目标名称。在这两个操作之间,可能会在目标名称下创建一个新文件,因为rename()系统调用是原子的,并且将销毁目标,这个新文件将被删除。

答案 1 :(得分:0)

没有

至少因为VM可能在它离开你的代码之后(在你输入File.rename()之后)以及在File.rename()代码开始运行之前被杀死。