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

时间:2014-12-06 16:49:49

标签: java

您好我实现了一个java文件观察器,它在创建文件时读取该文件。

它在开发机器上运行良好。我创建了一些文件并通过日志调用了ENTRY_CREATE,我的程序按预期读取文件。不会调用ENTRY_MODIFY。

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

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

1 个答案:

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