为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

三国纷争 2022-06-30 18:30:35
我知道我可以使用 lastModified() 来获取文件的最后修改时间。我不明白的是如何使用这种方法来检测文件是否已更改。我是否将其与当前时间进行比较?我正在尝试执行以下操作,但我认为它不起作用long time = xx.lastModified();if(time != localtime)//.....
查看完整描述

2 回答

?
慕姐4208626

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 );

}

}


查看完整回答
反对 回复 2022-06-30
?
撒科打诨

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,当发生写入或更改属性时将触发。intofiyby constast 为此分离了事件类型:IN_ATTRIBIN_WRITE.


查看完整回答
反对 回复 2022-06-30
  • 2 回答
  • 0 关注
  • 216 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信