我试图创建一个只轮询特定目录中的文本文件的方法。如果文本文件更改大小,则会读取对其进行的最新条目。我相信我必须使用线程来做到这一点?
到目前为止,我有:public boolean FileUpdated(File file) {
this.timeStamp = file.lastModified();
if (this.timeStamp != timeStamp) {
this.timeStamp = timeStamp;
//file is updated
return true;
}
//file is not updated
return false;
}
有人能指出我正确的方向吗?
答案 0 :(得分:0)
您认为池化活动需要单独的线程是正确的,但是使用标准线程最好使用Timer线程,因为这将隐含地安排您的日程安排' FileUpdated"方法定期。为了实现这一点,您还需要从TimerTask中放置或调用FileUpdated方法,例如:
public class FileChecker {
Timer timer;
public FileChecker(int seconds,File aFileToCheck) {
timer = new Timer();
timer.schedule(new FileCheckTask(aFileToCheck),0,seconds*1000);
}
class FileCheckTask extends TimerTask {
private File fileToCheck;
public FileCheckTask(File aFileToCheck){
fileToCheck = aFileToCheck;
}
public void run() {
System.out.format("Checking File....");
FileUpdated(fileToCheck);
}
public void FileUpdated(File file) {
this.timeStamp = file.lastModified();
if (this.timeStamp != timeStamp) {
this.timeStamp = timeStamp;
//file is updated, do something here
}
}
}
public static void main(String args[]) {
//checks file every 5 seconds
new FileChecker(5,"PathToTargetFile");
}
}
你会注意到我已经将你的方法返回类型更改为void,因为你显然无法从TimerTask"运行"的上下文中返回一个值。方法,您只需检查条件,然后在TimerTask线程本身中执行您需要做的任何工作,例如读取更新的文件。