gpt4 book ai didi

java - Java File 方法 "canWrite()"可以支持锁定吗?

转载 作者:搜寻专家 更新时间:2023-10-30 21:03:40 24 4
gpt4 key购买 nike

我有一个 Java 应用程序,用于监视传入 XML 文件的文件夹。当检测到新文件时,我需要测试当前未更新且已关闭的文件。我的想法是使用 File.canWrite()来测试这个。这样做有什么问题吗?这是测试文件是否已完全写入的好方法吗?

我提出的其他想法是:

  • 解析传入的 XML 文件并进行测试结束标记就在那里。
  • 检查 EoF 字符。

我只是不确定这些方法中的任何一个都可以处理所有情况。

最佳答案

不,canWrite 不适合这个目的。通常,即使另一个进程正在写入,该文件也是可写的。

您需要更高级别的协议(protocol)来协调锁定。如果您打算在单个平台上使用此代码,您可以使用 NIO's FileLock facility .但请仔细阅读文档,并注意在许多平台上,锁只是建议性的。

另一种方法是让一个进程使用您的进程无法识别的名称写入文件,然后在写入完成后将文件重命名为可识别的名称。在大多数平台上,如果源和目标是相同的文件系统卷,则重命名操作是原子的。名称更改可能会使用不同的文件扩展名,或者甚至将文件从一个目录移动到另一个目录(在同一卷上)。

由于在这种情况下您只使用 XML,寻找关闭标记会起作用,但这并不是万无一失的——如果在最终标记之后有注释,或者作者或根本没有编写有效的 XML 怎么办?

寻找 EOF 将工作。总会有一个 EOF,即使作者刚刚打开文件并且还没有写任何东西。如果不是这样,最简单的方法就是让读者在文件出现后立即开始解析;它只会阻塞,直到作者关闭文件。但是文件系统不是这样工作的。每个文件都有一个结束,即使某个进程当前正在移动它也是如此。

关于java - Java File 方法 "canWrite()"可以支持锁定吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/122282/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com