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) ファイルが再度存在することを確認します (CREATED の直後に DELETED された場合)。そして、RandomAccessFile の取得を再試行します。これは決して起こらなかったが、理論的には起こり得ると思う。

3) ファイルがオペレーティング システムの排他的/共有ロックを使用して保存された場合。他のプロセスがまだハンドルを持っている場合、ロックは取得できません。

面白いのは....実際にはバグがあります..以前は、ファイルが作成されたばかりのときに、ファイルを排他的にロックできた(そして共有が機能した)ことです。しかし、ファイルの内容は常に null でした。

ということで、CREATE直後のLOCKINGが常に効くとは限らないようです。ロックしようとする前に MODIFIED を待つと、問題が解決するようです。

実際、例外は FileNotFound ではなく、FileInUse または FileNotAccessible ... です。

于 2013-12-08T11:47:30.313 に答える