有什麼阻止您檢查您的Java進程鎖定文件?您可以使用Observer模式來警告主線程(或者哪個線程)在文件中的更改。
例如:
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的等價物適用於任何文件描述符。
而不是簡單地輪詢我在上面提到的線程中的文件,讓操作系統做到這一點!將文件傳入設置爲select
的writefds
,然後在文件被修改時返回。這意味着您的進程不會花費寶貴的CPU時間來等待文件的更改。
我還沒有驗證Java是否在JDK中公開這個調用,所以它可能需要編寫一個JNI接口才能使其工作。我在這方面的知識有點模糊,對不起。
再次編輯:
發現它! Java的Selector類看起來像它實現了select
。不幸的是,FileChannel是不可選擇的,這在這種情況下可能是必需的。 :(
來源
2011-06-08 17:07:54
Tom
如果沒有那麼多的要求,我會用JMX,看起來有點複雜,我會用監聽器的方法,不用端口8888,因爲我想防止衝突,可能是隨機的。這裏:http:// stackoverflow。com/questions/6345153/bat-if-statement-based-modify-date-of-file/6388780 – 2011-06-17 20:29:31