有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

多线程Java轮询文本文件?

我正在尝试创建一个方法,只轮询特定目录中的文本文件。如果文本文件的大小发生变化,它将读取对其进行的最新输入。我相信我必须使用线程来实现这一点

到目前为止,我已经:

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) 个答案

  1. # 1 楼答案

    您的假设是正确的,即池活动将需要一个单独的线程,但是,最好使用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“run”方法的上下文中返回值,相反,您只需检查条件,然后在TimerTask线程本身中执行任何需要执行的工作,例如读取更新的文件