您好我实现了一个java文件观察器,它在创建文件时读取该文件。
它在开发机器上运行良好。我创建了一些文件并通过日志调用了ENTRY_CREATE,我的程序按预期读取文件。不会调用ENTRY_MODIFY。
但在生产机器上它的表现不同。许多文件都写入目录,当调用ENTRY_CREATE时,我的程序无法正确读取文件。我注意到有一些ENTRY_MODIFY。
如何判断文件是否已完成,以便我的程序可以正确读取文件。从this article开始,它提到在调用最后一次修改时文件已完成。但我怎么知道?有时候不会调用ENTRY_MODIFY。
答案 0 :(得分:1)
我决定检查lastmodified文件。如果它停止更改,我继续处理该文件。我正在监视日志,如果一切顺利,我将使用这种方法。
// 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