質問: Files.exists(path); n += 1; if (n > limit) { System.out.println("limit over"); } } ``` 上のような感じで書いているのですが ところがファイルが出力されているはずなのにflagがtrueになりません。 trueが帰ることもあるのですがタイミングがバラバラだったりします。 lsコマンドなどで自分で存在を確認すると そのとたんにFiles.existsでもtrueが帰ります。 理由は分かりませんが、シュレディンガーの猫のような感じです。 自分で見つけた解決策としてはFiles.findを使えばなんとかなるのですが Files.existsがなぜうまく作用しないのか理由がしりたいと考えています。 原因がわかる方がいましたら、ご教授お願いします。
回答: > > ネットワークドライブ上の他のPCから出力されたファイルの監視 > > > という条件から推測すると、NFS領域を非同期モードで使用しているため、他のPCで書き出した(作成した)ファイルが同期的に見えないため、と考えます。 NFSサーバのエクスポートオプションに「`sync`」を指定する、加えてNFSクライアントのマウントオプションにも「`sync`」を指定することで解消すると思います。 なお、OSは「RHEL4」ということですが、Java9の動作条件によると、RHEL6以上とのことですので、Java9は見送られたほうがよいかと思います。 また、RHEL4のkernelは2.6.9ですので、inotify-java APIも動作しないかと思います。(inotify-javaのサイトには、2.6.13以降が必要、とあるため)