2009-10-12 90 views
4

我们的一位客户正在使用一些Novel安全软件,该软件有时会锁定我们软件创建的一些.class文件。当这种情况发生时,这会对他们造成一些令人讨厌的问题,并且我正试图研究一种解决方法,我们可以添加到我们的错误处理中以解决此问题。我想知道是否有可用于检测文件是否被锁定的java api中的任何调用,如果是,则解锁它。使用java API锁定和解锁文件

+1

你是什么意思“锁定文件”?你的意思是软件使用.class文件,所以它们不能更改?或者你的意思是像羊群(2)? – abyx 2009-10-12 17:36:02

回答

1

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

0

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

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