2014-12-06 60 views
2

嗨,我實現了一個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

回答

1

我決定檢查上次修改的文件。如果停止更改,我會繼續處理文件。我正在監視日誌,如果一切順利,我會使用這種方法。

// 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 
相關問題