Java プロセスからロック ファイルをチェックするのを妨げているものはありますか? オブザーバー パターンを使用して、メイン スレッド (またはいずれかのスレッド) にファイルの変更を警告できます。
例えば:
public class FileWatcher implements Observable {
private long lastModified;
private final File file;
public FileWatcher(File f) {
this.file = f;
this.lastModified = file.lastModified();
Thread t = new Thread() {
public void run() {
while(!stopThread) {
if(lastModified < file.lastModified()) {
lastModified = file.lastModified();
setChanged();
notifyObservers();
}
Thread.currentThread().sleep(5);
}
}
};
t.start();
}
}
免責事項: まったくテストも検証もされていませんが、その考えは理解できると思います。
編集:おっと、ループを忘れました。
編集:新しいアイデア。
私には別の考えがあります。(すでに回答を受け入れていることは知っていますが、これを捨てたかったのです。)このselect
機能を使用することは可能ですか?MSDN ドキュメントの私の非常に限られたスキムでは、これはソケットのコンテキストでのみ言及されています。Linux に相当するものは、どのファイル記述子にも適用できることを知っています。
上記のスレッドで単にファイルをポーリングする代わりに、OS に任せてください。writefds
ファイルをセットに渡すselect
と、ファイルが変更されたときに返されます。これは、プロセスがファイルへの変更を待っている貴重な CPU 時間を消費していないことを意味します。
Java がこの呼び出しを JDK で公開しているかどうかはまだ確認していないため、動作させるには JNI インターフェースを作成する必要があるかもしれません。この分野に関する私の知識は少しあいまいです、申し訳ありません。
もう一度編集します。
それを見つけた!Java の Selector クラスは を実装しているように見えますselect
。残念ながら、FileChannel は選択できません。この場合はおそらく必要です。:(