Click here to Skip to main content
15,885,365 members
Articles / Programming Languages / Java
Tip/Trick

File Change Notification in Java 7

Rate me:
Please Sign up or sign in to vote.
4.00/5 (1 vote)
12 Mar 2013CPOL 21.1K   164   2  
This article describes the File Change Notification functionality in Java 7.

Sample Image

Introduction

File Change Notification is a new feature added in JDK 7. It is a part of the new file system API (NIO 2.0). It uses the WatchService API to receive file change notification events like creation, modification, and deletion of files or directories.

Background

Following are the steps required to monitor the notification events:

  • Create a WatchService as follows:
  • Java
    WatchService service = FileSystems.getDefault().newWatchService();
  • Get a reference of the file or directory to be monitored as follows:
  • Java
    Path path = Paths.get(dir);
  • Register the file/directory with the WatchService, specifying the events to be monitored (Create, Modify, Delete) as follows:
  • Java
    path.register(watchService,StandardWatchEventKinds.ENTRY_CREATE,
                               StandardWatchEventKinds.ENTRY_MODIFY,
                               StandardWatchEventKinds.ENTRY_DELETE);
  • Create an infinite loop to monitor the events using the take() method to retrieve a watchkey placed into the watch service's queue when an event occurs as follows:
  • Java
    while(true)
    {
        WatchKey key = service.take();
        ...
    }
  • Inside the infinite loop, use another loop to print all events as follows: If the directory becomes inaccessible, the key will become invalid and the loop will be exitted.
  • Java
    for (WatchEvent event : key.pollEvents())
    {
         System.out.println(event.kind() + ": "+ event.context());
    }
    boolean valid = key.reset();
    if (!valid)
    {
        break;
    }

Using the code

Following is the complete java code:

Java
import java.nio.*;
import java.io.*;
import java.nio.file.StandardWatchEventKinds.*;
import java.nio.file.*;

public class FileChangeNotifier
{
   public static void main(String args[]) throws IOException, InterruptedException
   {
      watchDir("E:\\MyFolder");		// Monitor changes to the files in E:\MyFolder
   }
   public static void watchDir(String dir) throws IOException, InterruptedException
   {
       WatchService service = FileSystems.getDefault().newWatchService();	// Create a WatchService
       Path path = Paths.get(dir);	// Get the directory to be monitored
       path.register(service,
            StandardWatchEventKinds.ENTRY_CREATE,
            StandardWatchEventKinds.ENTRY_MODIFY,
            StandardWatchEventKinds.ENTRY_DELETE);	// Register the directory
       while(true)
       {
          WatchKey key = service.take();	// retrieve the watchkey
          for (WatchEvent event : key.pollEvents())
          {
             System.out.println(event.kind() + ": "+ event.context());	// Display event and file name
          }
          boolean valid = key.reset();
          if (!valid)
          {
             break;	// Exit if directory is deleted
          }
       }
   }
}

Points of Interest

The File Change Notification feature provides a simple and elegant way of monitoring file notification events.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Instructor / Trainer NIIT, India
India India
I am a trainer by profession. Currently I am working with iFuture Technologies(India) as a Senior Faculty. I enjoy programming as a hobby. During my career I have seen the growth and decline of many technologies, many of them being my favorites like Flash, WPF, Windows Mobile Development. Few of my current favorites are Android, Xamarin and Python, though I also like traditional and evergreen languages like PHP, C#, Visual Basic and Java.

Apart from computers, my favorite pastime is bicycling.

Comments and Discussions

 
-- There are no messages in this forum --