JavaのFiles.existsであるはずのファイルが確認できない


java : jdk9.01  
os : linux Red Hat 4.8.5-11

Javaのコードで他のプログラムの出力するファイルのチェックを数秒毎にチェックし、  
存在を確認できたら次に進むというコードを書こうとしています。

[code]

    int n = 0;
    boolean flag = false;
    while (flag == false) {
        TimeUnit.SECONDS.sleep(waitsec);
        flag = Files.exists(path);
         n += 1;
         if (n > limit) {
             System.out.println("limit over");
         }
    }
    
[/code]

上のような感じで書いているのですが  
ところがファイルが出力されているはずなのにflagがtrueになりません。  
trueが帰ることもあるのですがタイミングがバラバラだったりします。  
lsコマンドなどで自分で存在を確認すると  
そのとたんにFiles.existsでもtrueが帰ります。

理由は分かりませんが、シュレディンガーの猫のような感じです。  
自分で見つけた解決策としてはFiles.findを使えばなんとかなるのですが  
Files.existsがなぜうまく作用しないのか理由がしりたいと考えています。

原因がわかる方がいましたら、ご教授お願いします。




ファイル出力側のプログラムでファイル出力をフラッシュしてない場合、タイミングよっては出力がバッファリングされた状態となり、ディスクに書き込まれてないので、他のプログラムからは読めないのかもしれません。

Cだとfflushやfsyncなどを使って明示的に書き込みをフラッシュしてみると変化があるかもしれません。また、Javaだと、PrintWriterなどのFlushableインターフェースの実装で
flush() を呼び出すと書き込みがフラッシュされると思います。

