当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《JavaFile方法"canWrite()"可以支持锁定吗?》经验,为你挑选了1个好方法。

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

我投掷的其他想法是:

解析传入的XML文件并测试结束标记是否存在.

检查EoF角色.

我只是不确定这些方法中的任何一种都能处理所有场景.



1> erickson..:

不,canWrite不适用于此目的.通常,即使另一个进程正在编写,该文件也是可写的.

您需要更高级别的协议来协调锁定.如果您计划在单个平台上使用此代码,则可以使用NIO的FileLock工具.但请仔细阅读文档,并注意在许多平台上,锁只是建议性的.

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

因为在这种情况下你只使用XML,所以查找一个close标签是可行的,但它并不是万无一失的 - 如果在最终标记之后有注释,或者编写器还是根本没有编写有效的XML?

寻找EOF将无法正常工作.即使作者刚刚打开文件并且还没有写入任何内容,总会有EOF.如果不是这样,最简单的方法就是让读者在文件出现后立即开始解析; 它会直接阻止,直到作者关闭文件.但是文件系统不能以这种方式工作.即使某个进程正在移动它,每个文件都有结束.

推荐阅读
低调pasta_730
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有