views:

20

answers:

1

I'm currently using jpathwatch to watch for new files created in a folder. All fine, but I need to find out when a program finished writing to a file.

The library's author describes on his website (http://jpathwatch.wordpress.com/faq/) how that's done but somehow I don't have a clue how to do that. Maybe it's described a bit unclear or I just don't get it.

I would like to ask whether you could give me a snippet which demonstrates how to do that.

This is the basic construct:

public void run() {

    while (true) {
        WatchKey signalledKey;
        try {
            signalledKey = watchService.take();
        } catch (InterruptedException ix) {
            continue;
        } catch (ClosedWatchServiceException cwse) {
            break;
        }

        List<WatchEvent<?>> list = signalledKey.pollEvents();
        signalledKey.reset();

        for (WatchEvent<?> e : list) {
            if (e.kind() == StandardWatchEventKind.ENTRY_CREATE) {
                Path context = (Path) e.context();
                String filename = context.toString();

                // do something
            } else if (e.kind() == StandardWatchEventKind.ENTRY_DELETE) {
                Path context = (Path) e.context();
                String filename = context.toString();

                // do something
            } else if (e.kind() == StandardWatchEventKind.OVERFLOW) {
            }
        }
    }
}
A: 

From the FAQ for jpathwatch, the author says that you will get an ENTRY_MODIFY event regularly when a file is being written and that event will stop being generated when the file writing is complete. He is suggesting that you keep a list of files and the time stamp for the last generated event for each file.

At some interval (which he refers to as a timeout), you scan through the list of files and their timestamps. If any file has a time stamp that is older than your timeout interval, then that should mean that it isn't being updated anymore and is probably complete.

He even suggests you try to determine the rate at a file is growing and calculate out when it should complete so that you can set your poll time to the expected completion duration.

Does that clear it up at all? Sorry I'm not up to expressing that in code :)

Arnold Spence