Java - 轮询文本文件?

时间:2014-03-14 13:22:41

标签: java multithreading polling last-modified

我试图创建一个只轮询特定目录中的文本文件的方法。如果文本文件更改大小,则会读取对其进行的最新条目。我相信我必须使用线程来做到这一点?

到目前为止,我有:

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

有人能指出我正确的方向吗?

1 个答案:

答案 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线程本身中执行您需要做的任何工作,例如读取更新的文件。