我在基于 Java 7 WatchService API 跟踪目录中文件内容的应用程序中遇到了一个反复出现的问题。当底层文件系统对文件触发修改事件时,我想立即计算其 SHA-256。
但是经常发生另一个进程打开了文件(即 Word),从而保留了排他锁并阻止我的应用程序进行任何读/写操作。如果针对打开的文件创建了任何流/通道,则会抛出用于 nio API 的 FileNotFoundException 或 FileSystemException,并带有如下消息:
该进程无法访问该文件,因为它正被另一个进程使用
当文件实际上不存在于 fs 上时,我无法提供一种解决方案来检测此类情况,而不会掩盖“真实”的 FileNotFoundException。
我想出了通过 File.exists 检查存在性的想法,然后如果在打开流时抛出 FileNotFoundException,我将能够推断出文件已被锁定。我对这方面的任何意见持开放态度!
谢谢!