锁定文件并删除它而不先释放锁定

时间:2010-12-03 22:42:35

标签: java file-io

我想从文件中读取然后将其删除,同时阻止其他进程访问它。如何实现这一目标?

FileLock将无法工作,因为您必须先释放锁并关闭频道,然后才能调用File.delete()。我担心的是,在释放锁之后,另一个进程可能会锁定它并在删除文件之前开始读取。

我正在使用Java 5,此时升级到6不是一个选项。

2 个答案:

答案 0 :(得分:5)

我不知道这是否可行,但一个简单的解决方案是使用操作系统用户和权限来确保只有您的进程可以读取文件。

另一种方法是将文件重命名为随机生成的字符串,然后锁定,读取,解锁,然后删除重命名的文件。理论上,另一个程序可以猜测文件名,并在文件解锁后但在删除之前读取文件。但在实践中你可能会没事的。

答案 1 :(得分:1)

您可以将文件移动到备用位置(其他潜在进程无法找到它),然后在那里进行处理吗?如果没有,那么在释放锁之前清除文件中的数据呢?