Java观察器 - 如何知道文件是否完全创建
问题描述:
嗨,我实现了一个Java文件观察器,它在创建时读取文件。Java观察器 - 如何知道文件是否完全创建
它可以在开发机器上正常工作。我创建了几个文件,并通过日志,调用ENTRY_CREATE,我的程序按预期读取文件。 ENTRY_MODIFY未被调用。
但是在生产机器上它的行为有所不同。许多文件被写入目录,并且当调用ENTRY_CREATE时,我的程序无法正确读取文件。我注意到有一些ENTRY_MODIFY。
如何判断文件是否已完成,以便我的程序可以正确读取文件。来自this article,它提到该文件在最后一次修改被调用时完成。但我怎么知道?有时ENTRY_MODIFY没有被调用。
答
我决定检查上次修改的文件。如果停止更改,我会继续处理文件。我正在监视日志,如果一切顺利,我会使用这种方法。
// 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
在开发机器和生产机器上是否使用相同的操作系统? – 2014-12-06 17:09:00
用于开发的Mac,用于生产的debian – nuttynibbles 2014-12-06 17:11:37