【问题标题】:Java watcher - How to know if a file is fully createdJava watcher - 如何知道文件是否完全创建
【发布时间】:2014-12-06 16:49:48
【问题描述】:

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

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

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

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

【问题讨论】:

  • 您在开发机器和生产机器上使用相同的操作系统吗?
  • Mac 用于开发,debian 用于生产

标签: java


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-17
    • 2011-12-08
    • 2011-10-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多