Java观察器 - 如何知道文件是否完全创建

Java观察器 - 如何知道文件是否完全创建

问题描述:

嗨,我实现了一个Java文件观察器,它在创建时读取文件。Java观察器 - 如何知道文件是否完全创建

它可以在开发机器上正常工作。我创建了几个文件,并通过日志,调用ENTRY_CREATE,我的程序按预期读取文件。 ENTRY_MODIFY未被调用。

但是在生产机器上它的行为有所不同。许多文件被写入目录,并且当调用ENTRY_CREATE时,我的程序无法正确读取文件。我注意到有一些ENTRY_MODIFY。

如何判断文件是否已完成,以便我的程序可以正确读取文件。来自this article,它提到该文件在最后一次修改被调用时完成。但我怎么知道?有时ENTRY_MODIFY没有被调用。

+0

在开发机器和生产机器上是否使用相同的操作系统? – 2014-12-06 17:09:00

+0

用于开发的Mac,用于生产的debian – nuttynibbles 2014-12-06 17:11:37

我决定检查上次修改的文件。如果停止更改,我会继续处理文件。我正在监视日志,如果一切顺利,我会使用这种方法。

// Check if file is done created by checking change in date modified 
    File file = new File("...../filepath"); 
    long tmpFileLastModified = 0; 
    int counter = 0; 
    while (true) { 
     long fileLastModified = file.lastModified(); 

     if (fileLastModified != tmpFileLastModified) { 
      tmpFileLastModified = fileLastModified; 

      try { 
       Thread.sleep(200); 
      } catch (InterruptedException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } else { 
      msLogger.debug("fileModifiedCallback: File done modified"); 
      break; 
     } 

     counter++; 
    } 

// do something with the file