使用java API锁定和解锁文件

我们的一个客户正在使用一些新的安全软件,有时会锁定我们软件创建的一些.class文件。 当发生这种情况时,这会给他们带来一些令人讨厌的问题,并且我正在尝试研究我们可以添加到我们的error handling中以解决此问题的解决方法。 我想知道java api中是否有任何调用可用于检测文件是否被锁定,如果是,则将其解锁。

在尝试写入文件之前,您可以使用File.canWrite()检查您的Java应用程序是否可以写入该文件。 但是,如果第三方应用程序在File.canWrite()检查和应用程序实际尝试写入之间锁定文件,您仍可能遇到问题。 出于这个原因,我会编写你的应用程序,只需继续尝试写入文件并捕获文件被锁定时抛出的exception。 我不相信有一种本机Java方法来解锁已被另一个应用程序锁定的文件。 您可以作为特权用户执行shell命令来强制执行,但这看起来不够优雅。

File.canWrite()具有Asaph提到的竞争条件。 您可以尝试FileChannel.lock()并获取文件的独占锁定。 只要.class位于本地磁盘上,这应该可以正常工作(文件锁定在网络磁盘上可能会有问题)。

或者,根据发现.class名称的方式,您可以每次为.class创建一个新名称; 然后,如果防病毒软件锁定了您的初始类,您仍然可以创建新的类。