2 回答
TA贡献1852条经验 获得超7个赞
对于这个问题有很多解决方案,我知道一个:对于单个文件,启动一个线程来检查 lastModified 值并将其与之前的值进行比较。
import java.util.*;
import java.io.*;
public abstract class FileWatcher extends TimerTask {
private long timeStamp;
private File file;
public FileWatcher( File file ) {
this.file = file;
this.timeStamp = file.lastModified();
}
public final void run() {
long timeStamp = file.lastModified();
if( this.timeStamp != timeStamp ) {
this.timeStamp = timeStamp;
onChange(file);
}
}
protected abstract void onChange( File file );
}
这是测试的主要内容:
import java.util.*;
import java.io.*;
public class FileWatcherTest {
public static void main(String args[]) {
// monitor a single file
TimerTask task = new FileWatcher( new File("c:/temp/text.txt") ) {
protected void onChange( File file ) {
// here we code the action on a change
System.out.println( "File "+ file.getName() +" have change !" );
}
};
Timer timer = new Timer();
// repeat the check every second
timer.schedule( task , new Date(), 1000 );
}
}
TA贡献1934条经验 获得超2个赞
如果您的意图是知道某个文件是否被修改,那么您肯定不必检索上次修改时间。Java NIO 有inotify
(在 Linux 上)名为WatchService
https://docs.oracle.com/javase/tutorial/essential/io/notification.html的包装器。
您可以在您感兴趣的文件上注册ENTRY_MODIFY
事件,然后等待相关联的监视键发出信号。
请注意,在 Linux 中,我们拥有比 Java NIO 提供的更精细的事件类型。例如ENTRY_MODIFY
,当发生写入或更改属性时将触发。intofiy
by constast 为此分离了事件类型:IN_ATTRIB
和IN_WRITE
.
添加回答
举报