syl*_*ain 9 java nio locking watchservice nio2
我在一个应用程序中遇到一个经常出现的问题,该应用程序基于Java 7 WatchService API跟踪目录中文件的内容.当底层文件系统触发文件的修改事件时,我想立即计算其SHA-256.
但是经常发生另一个进程打开文件(即Word),从而扣留了一个独占锁并阻止我的应用程序进行任何读/写操作.如果针对打开的文件创建了任何Stream/Channel,则会抛出一个类似于以下消息的FileNotFoundException或者用于nio API的FileSystemException:
该进程无法访问该文件,因为该文件正由另一个进程使用
当文件实际上不存在于fs上时,我无法提供能够检测到这种情况而不屏蔽"真正的"FileNotFoundException的解决方案.
我想出了通过File.exists检查存在的想法,然后如果在打开流时抛出FileNotFoundException,我将能够推断该文件已被锁定.我愿意接受任何意见!
谢谢!
您是否尝试过自己锁定文件?我假设您只能在未锁定且存在的情况下获取锁。
http://docs.oracle.com/javase/7/docs/api/java/nio/channels/FileChannel.html#tryLock%28%29