在网上找了很多有关java监听文件修改的资料,很多都做得太复杂了;而且用到本地都有问题。这里自己写一个简单的监听文件修改的方法,代码如下:
package com.yunho.rule;
import java.text.SimpleDateFormat;
import java.util.*;
import java.io.File;
import java.io.IOException;
public class FileListener{
/**
* A facility for threads to schedule tasks for future execution in a background thread.
* Tasks may be scheduled for one-time execution, or for repeated execution at regular intervals.
* */
private Timer timer;
/**
* current time
* */
private long currentTime=-1;
/**
* last Modified Time
* */
private long lastModifiedTime=-1;
/**
* 分钟
* */
private long times=1;
/**
* time
* */
private long pollingInterval=1000 * times;
/**
* file path
* */
private String filePath="src/com/yunho/rule/rule.xml";
public FileListener() {
File file=new File(filePath);
lastModifiedTime=file.lastModified();
currentTime=lastModifiedTime;
}
public static void main(String[] args) {
FileListener fileListener=new FileListener();
fileListener.timer = new Timer(true);
fileListener.start();
}
public void start(){
timer.schedule(new FileMonitor(), 0, pollingInterval);
while (true) {
try {
int ch = System.in.read();
System.out.println("ch = "+ch);
if (ch - 'c' == 0) {
System.out.println("QUIT");
timer.cancel();
break;
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
private class FileMonitor extends TimerTask {
public void run() {
File file = new File(filePath);
lastModifiedTime = file.exists() ? file.lastModified() : -1;
if (currentTime != lastModifiedTime) {
System.out.println(" File [ " + file.getName() + " ] changed At: "
+ new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS").format(lastModifiedTime));
currentTime = lastModifiedTime;
}
}
}
}