Apache Commons IO - FileAlterationMonitor Class



Overview

FileAlterationMonitor class represents a thread that spawns a monitoring thread triggering any registered FileAlterationObserver at a specified interval.

Class Declaration

Following is the declaration for org.apache.commons.io.monitor.FileAlterationMonitor Class −

public class FileAlterationMonitor
   extends Object implements Runnable

Here is the input file we need to parse −

input.txt

Welcome to TutorialsPoint. Simply Easy Learning.

Example - Nofiying Creation of a Directory and File.

CommonsIoTester.java

package com.tutorialspoint;

import java.io.File;
import java.io.IOException;
import org.apache.commons.io.FileDeleteStrategy;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.monitor.FileAlterationListenerAdaptor;
import org.apache.commons.io.monitor.FileAlterationMonitor;
import org.apache.commons.io.monitor.FileAlterationObserver;

public class CommonsIoTester {
   public static void main(String[] args) {
      //get the file object
      File inputFile = FileUtils.getFile("input.txt");
      String absolutePath = inputFile.getAbsolutePath();
      String parent = absolutePath.substring(0,absolutePath.indexOf("input.txt"));
      File parentDirectory = FileUtils.getFile(parent);
      FileAlterationObserver observer = FileAlterationObserver.builder().setFile(parentDirectory).get();
      observer.addListener(new FileAlterationListenerAdaptor() {
         @Override
         public void onDirectoryCreate(File file) {
            System.out.println("Folder created: " + file.getName());
         }        
         @Override
         public void onFileCreate(File file) {
            System.out.println("File created: " + file.getName());
         }
      });
      //create a monitor to check changes after every 500 ms
      FileAlterationMonitor monitor = new FileAlterationMonitor(500, observer);
      try {
          monitor.start();
         //create a new directory
         File newFolder = new File("test");
         File newFile = new File("test1");
         newFolder.mkdirs();
         Thread.sleep(1000);
         newFile.createNewFile();
         Thread.sleep(1000);
         monitor.stop(10000);
      } catch(IOException e) {
         System.out.println(e.getMessage());
      } catch(InterruptedException e) {
         System.out.println(e.getMessage());
      } catch (Exception e) {
         System.out.println(e.getMessage());
      }
   }
}

Output

It will print the following result −

Folder created: test
File created: test1

Example - Nofiying Deletion of a Directory and File.

CommonsIoTester.java

package com.tutorialspoint;

import java.io.File;

import org.apache.commons.io.FileDeleteStrategy;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.monitor.FileAlterationListenerAdaptor;
import org.apache.commons.io.monitor.FileAlterationMonitor;
import org.apache.commons.io.monitor.FileAlterationObserver;

public class CommonsIoTester {
   public static void main(String[] args) throws Exception {
      //get the file object
      File inputFile = FileUtils.getFile("input.txt");
      String absolutePath = inputFile.getAbsolutePath();
      String parent = absolutePath.substring(0,absolutePath.indexOf("input.txt"));
      File parentDirectory = FileUtils.getFile(parent);
      FileAlterationObserver observer = FileAlterationObserver.builder().setFile(parentDirectory).get();
      observer.addListener(new FileAlterationListenerAdaptor() {
         @Override
         public void onDirectoryDelete(File file) {
            System.out.println("Folder deleted: " + file.getName());
         }
         @Override
         public void onFileDelete(File file) {
            System.out.println("File deleted: " + file.getName());
         }
      });
      //create a monitor to check changes after every 500 ms
      FileAlterationMonitor monitor = new FileAlterationMonitor(500, observer);
      monitor.start();
      //create a new directory
      File newFolder = new File("test");
      File newFile = new File("test1");
      newFolder.mkdirs();
      Thread.sleep(1000);
      newFile.createNewFile();
      FileDeleteStrategy.NORMAL.delete(newFolder);
      Thread.sleep(1000);
      FileDeleteStrategy.NORMAL.delete(newFile);
      Thread.sleep(1000);
      monitor.stop(10000);
   }
}

Output

It will print the following result −

Folder deleted: test
File deleted: test1
Advertisements