是否有任何东西阻止您从 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 等效项适用于任何文件描述符。
与其简单地在我上面提到的线程中轮询文件,不如让操作系统来做!将文件传递到writefds
集合中select
,然后在修改文件时返回。这意味着您的进程不会花费宝贵的 CPU 时间来等待对文件的更改。
我还没有验证 Java 是否在 JDK 中公开了这个调用,所以它可能需要编写一个 JNI 接口才能让它工作。我在这方面的知识有点模糊,对不起。
再次编辑:
找到了!Java 的 Selector 类看起来像是实现了select
. 不幸的是,FileChannel 是不可选择的,这在这种情况下可能是必需的。:(