如何使用 lastModified() 检测文件是否已被修改

我知道我可以使用 lastModified() 来获取文件的最后修改时间。我不明白的是如何使用这种方法来检测文件是否已更改。我是否将其与当前时间进行比较?我正在尝试执行以下操作,但我认为它不起作用


long time = xx.lastModified();

if(time != localtime)

//.....


三国纷争
浏览 334回答 2
2回答

慕姐4208626

对于这个问题有很多解决方案,我知道一个:对于单个文件,启动一个线程来检查 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 );}}

撒科打诨

如果您的意图是知道某个文件是否被修改,那么您肯定不必检索上次修改时间。Java NIO 有inotify(在 Linux 上)名为WatchService https://docs.oracle.com/javase/tutorial/essential/io/notification.html的包装器。您可以在您感兴趣的文件上注册ENTRY_MODIFY事件,然后等待相关联的监视键发出信号。请注意,在 Linux 中,我们拥有比 Java NIO 提供的更精细的事件类型。例如ENTRY_MODIFY,当发生写入或更改属性时将触发。intofiyby constast 为此分离了事件类型:IN_ATTRIB和IN_WRITE.
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java