0

为什么要从返回的 a 中获取RandomAccessFile(path.toFile(),"rw")产品 a并且种类是?FileNotFoundExceptionPathWatchServiceWatchEventENTRY_CREATE

java.io.FileNotFoundException: 
C:\SharedFolders\FromS01\SSLServer01\SSLInternal02\DOMAIN\EML\E6046292.723
(The process cannot access the file because it is being used by another process)
    at java.io.RandomAccessFile.open(Native Method) ~[na:1.8.0-ea]
    at java.io.RandomAccessFile.<init>(RandomAccessFile.java:236) ~[na:1.8.0-ea]
    at cbbb.filejobs.Main.fileCopied(Main.java:446) ~[CbbbFileJobs.jar:na]
    at cbbb.filejobs.Main.processFilesPending(Main.java:409) ~[CbbbFileJobs.jar:na]
    at cbbb.filejobs.Main.handleFileTasks(Main.java:156) ~[CbbbFileJobs.jar:na]
4

1 回答 1

0

“该进程无法访问该文件,因为它正被另一个进程使用”

事实证明,通过 WatchService 事件,文件不一定在创建时就可用。

有时,操作系统在发生文件创建事件时,文件状态处于中间状态。

就我而言,解决方案是:

1) 注意 MODIFIED 事件。所有带有内容的文件都会有一个 CREATED 后跟一个 MODIFIED。

2) 检查文件是否再次存在(以防它在创建后立即被删除)。然后重试获取 RandomAccessFile 。这从未发生过,但我想它可以——理论上。

3) 如果文件是使用操作系统独占/共享锁定存放的。如果其他进程仍有句柄,则该锁将无法获得。

有趣的是..实际上是错误的..是我以前能够在文件刚刚创建时锁定文件独占(并且共享工作)。但文件内容始终为空。

因此,似乎在 CREATE 之后立即锁定并不总是有效。在尝试锁定之前等待 MODIFIED 似乎可以解决问题。

真的,例外不应该是 FileNotFound,而是 FileInUse 或 FileNotAccessible ...

于 2013-12-08T11:47:30.313 回答