原子文件写入操作(跨平台)

发布于 2021-01-29 15:14:23

如何建立原子文件写入操作?该文件将由Java服务编写,并由python脚本读取。
对于记录,读取远大于写入。但是写操作是成批发生的,而且往往很长。文件大小为兆字节。

现在,我的方法是:

  • 将文件内容写入同一目录中的临时文件
  • 删除旧文件
  • 将临时文件重命名为旧文件名。

这是正确的方法吗?如何避免出现删除旧文件但尚未重命名新文件名的情况?

这些编程语言( python和java )是否提供锁定和避免这种情况的构造?

关注者
0
被浏览
187
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    AFAIK号

    原因是要使这种原子操作成为可能,必须以事务性文件系统的形式提供OS支持。主流操作系统都没有提供事务性文件系统。

    编辑
    -至少对于符合POSIX的系统,我错了。rename如果@janneb指出,如果具有目标名称的文件已经存在,则POSIX系统调用将执行原子替换。这应该足以自动执行OP的操作。

    但是,事实仍然是, 不能File.renameTo()明确保证Java方法是原子方法,因此它不能为OP问题提供跨平台的解决方案。 __

    编辑2- 使用Java 7,您可以将其java.nio.file.Files.move(Path source, Path target, CopyOption... options)与copyOptions和一起使用ATOMIC_MOVE。如果(操作系统/文件系统)不支持此功能,则应获取异常。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看