Java IO Tutorial - Java WatchService.take()








Syntax

WatchService.take() has the following syntax.

WatchKey take()  throws InterruptedException

Example

In the following code shows how to use WatchService.take() method.

import java.io.IOException;
import java.nio.file.FileSystems;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardWatchEventKinds;
import java.nio.file.WatchEvent;
import java.nio.file.WatchEvent.Kind;
import java.nio.file.WatchKey;
import java.nio.file.WatchService;
//from  w  w w .j  ava2s . co  m
class MyWatch {

  public void watchRNDir(Path path) throws IOException, InterruptedException {
    try (WatchService watchService = FileSystems.getDefault().newWatchService()) {
      path.register(watchService, StandardWatchEventKinds.ENTRY_CREATE,
          StandardWatchEventKinds.ENTRY_MODIFY,
          StandardWatchEventKinds.ENTRY_DELETE);

      while (true) {
        // retrieve and remove the next watch key
        final WatchKey key = watchService.take();

        for (WatchEvent<?> watchEvent : key.pollEvents()) {
          final Kind<?> kind = watchEvent.kind();
          if (kind == StandardWatchEventKinds.OVERFLOW) {
            continue;
          }
          final WatchEvent<Path> watchEventPath = (WatchEvent<Path>) watchEvent;
          final Path filename = watchEventPath.context();
          System.out.println(kind + " -> " + filename);
        }

        boolean valid = key.reset();

        if (!valid) {
          break;
        }
      }
    }
  }
}

public class Main {

  public static void main(String[] args) {

    final Path path = Paths.get("C:/tutorial");
    MyWatch watch = new MyWatch();

    try {
      watch.watchRNDir(path);
    } catch (IOException | InterruptedException ex) {
      System.err.println(ex);
    }

  }
}