monitor multiple log file simultaneously
<p>I have made a program that continuously monitors a log file. But I don't know how to monitor multiple log files. This is what I did to monitor single file. What changes should I make in the following code so that it monitors multiple files also?</p>

<pre><code>package com.read;

import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.channels.FileChannel;
import java.nio.channels.FileLock;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class FileWatcherTest {

    public static void main(String args[]) {

        final File fileName = new File("D:/logs/myFile.log");

        // monitor a single file
        TimerTask fileWatcherTask = new FileWatcher(fileName) {

            long addFileLen = fileName.length();
            FileChannel channel;
            FileLock lock;
            String a = "";
            String b = "";

            @Override
            protected void onChange(File file) {

                RandomAccessFile access = null;
                try {
                    access = new RandomAccessFile(file, "rw");
                    channel = access.getChannel();
                    lock = channel.lock();
                    if (file.length() &lt; addFileLen) {
                        access.seek(file.length());
                    } else {
                        access.seek(addFileLen);
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
                String line = null;
                try {

                    while ((line = access.readLine()) != null) {

                        System.out.println(line);

                    }

                    addFileLen = file.length();

                } catch (IOException ex) {
                    Logger.getLogger(FileWatcherTest.class.getName()).log(
                            Level.SEVERE, null, ex);
                }
                try {
                    lock.release();
                } catch (IOException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                } // Close the file

                try {
                    channel.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

            }

        };

        Timer timer = new Timer();
        // repeat the check every second
        timer.schedule(fileWatcherTask, new Date(), 1000);
    }
}




package com.read;

import java.util.*;
import java.io.*;

public abstract class FileWatcher extends TimerTask {

    private long timeStamp;
    private File file;
    static String s;

    public FileWatcher(File file) {
        this.file = file;
        this.timeStamp = file.lastModified();
    }

    public final void run() {
        long timeStamp = file.lastModified();

        if (this.timeStamp != timeStamp) {
            this.timeStamp = timeStamp;

            onChange(file);
        }
    }

    protected abstract void onChange(File file);
}
</code></pre>
