我们的一位客户正在使用一些新的安全软件,有时会锁定我们软件创建的一些.class文件。当这种情况发生时,这会给他们带来一些令人讨厌的问题,并且我正在尝试研究我们可以添加到我们的错误处理中的解决方法,以便在出现问题时解决此问题。我想知道java api中是否有任何调用可用于检测文件是否被锁定,如果是,则将其解锁。
答案 0 :(得分:1)
在尝试写入文件之前,您可以使用File.canWrite()检查您的Java应用程序是否可以写入该文件。但是,如果第三方应用程序在File.canWrite()检查和应用程序实际尝试写入之间锁定文件,您仍可能遇到问题。出于这个原因,我会编写你的应用程序,只需继续尝试写入文件并捕获文件被锁定时抛出的异常。我不相信有一种本机Java方法来解锁已被另一个应用程序锁定的文件。您可以执行shell命令作为特权用户来强制执行,但这看起来不够优雅。
答案 1 :(得分:0)
File.canWrite()具有Asaph提到的竞争条件。您可以尝试FileChannel.lock()并获取文件的独占锁。只要.class位于本地磁盘上,这应该可以正常工作(文件锁定在网络磁盘上可能会有问题)。
或者,根据发现.class名称的方式,您可以每次为.class创建一个新名称;然后,如果防病毒软件锁定了您的初始类,您仍然可以创建新的类。