读取由另一个应用程序锁定的日志文件

时间:2011-11-10 09:46:59

标签: java

我想访问由第三方Java应用程序锁定的日志文件。该文件全天被锁定,并将在第二天发布。但是,我的目标是现在使用RandomAccessFile阅读它(必须使用这个类,因为我需要在阅读时开始/存储最后一个位置),而不要等到明天。

目前,只有在使用Unlocker软件解锁文件时,我才能读取日志。任何人都可以建议我可以在我的Java程序中使用任何jar /实用程序来实现我的目标吗?

3 个答案:

答案 0 :(得分:2)

假设您使用的是Microsoft操作系统:
软件Shadow Copy正在使用Microsoft的VSS)来复制锁定的文件。 您可以在Java Runtime Environment中使用该软件,也可以通过VSS-API自己使用Java Native Interface

我的方法是文件,然后通过它的副本访问内容。缺点是,如果文件自复制操作后已更新,则可能会读取过时的信息。

然而,这只是猜测,因为我不熟悉这个主题。

答案 1 :(得分:1)

您可以使用Java锁定/解锁文件和文件夹,但只能由锁定它们的应用程序(您编程)锁定/解锁。但是没有Java方法/类可以解锁其他进程使用的文件。

您应该将应用程序与另一个(本机)软件捆绑在一起。例如,您可以为Linux系统创建shell脚本并执行它。在Java应用程序中检测它正在运行的操作系统,以便您可以执行正确的脚本/软件。

当应用程序需要RW锁定时,系统必须确保没有其他人有权修改它,这就是为什么你需要杀死正在使用它的进程。

如果您可以访问该第三方Java应用程序的源代码(实际上是您需要的锁定文件),那么您可以实现服务器端,该服务器端将监听解锁文件请求和锁定批准它又回来了。

根据我的观点,更好的方法是将该应用程序的文件传输到您的应用程序,然后执行您想要的操作,第三方应用程序可以不间断地运行(不应该引人注意)。如果你需要修改它,那么第三个应该等待,你修改并发回一个更新的版本,第三个继续工作。

答案 2 :(得分:1)

我没有看到任何可靠的工具来完成这样的工作,我的第一个想法是尝试通过任何servlet或任何其他机制将文件作为服务公开时避免锁定。 servlet读取文件一次,然后以纯文本(或流)形式传递其内容......不再有锁争用

HTH 杰罗姆