Class Tailer

java.lang.Object
org.apache.commons.io.input.Tailer
All Implemented Interfaces:
Runnable

public class Tailer extends Object implements Runnable
Simple implementation of the unix "tail -f" functionality.

1. Create a TailerListener implementation

First you need to create a TailerListener implementation (TailerListenerAdapter is provided for convenience so that you don't have to implement every method).

For example:

  public class MyTailerListener extends TailerListenerAdapter {
      public void handle(String line) {
          System.out.println(line);
      }
  }

2. Using a Tailer

You can create and use a Tailer in one of three ways:

An example of each of these is shown below.

2.1 Using the static helper method

      TailerListener listener = new MyTailerListener();
      Tailer tailer = Tailer.create(file, listener, delay);

2.2 Using an Executor

      TailerListener listener = new MyTailerListener();
      Tailer tailer = new Tailer(file, listener, delay);

      // stupid executor impl. for demo purposes
      Executor executor = new Executor() {
          public void execute(Runnable command) {
              command.run();
           }
      };

      executor.execute(tailer);
 

2.3 Using a Thread

      TailerListener listener = new MyTailerListener();
      Tailer tailer = new Tailer(file, listener, delay);
      Thread thread = new Thread(tailer);
      thread.setDaemon(true); // optional
      thread.start();

3. Stopping a Tailer

Remember to stop the tailer when you have done with it:

      tailer.stop();
 

4. Interrupting a Tailer

You can interrupt the thread a tailer is running on by calling Thread.interrupt().

      thread.interrupt();
 

If you interrupt a tailer, the tailer listener is called with the InterruptedException.

The file is read using the default charset; this can be overridden if necessary.

Since:
2.0, 2.5 Updated behavior and documentation for Thread.interrupt()
See Also:
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    private final Charset
    The character set that will be used to read the file.
    private static final Charset
     
    private static final int
     
    private final long
    The amount of time to wait for the file to be updated.
    private final boolean
    Whether to tail from the end or start of file
    private final File
    The file which will be tailed.
    private final byte[]
    Buffer on top of RandomAccessFile.
    private final TailerListener
    The listener to notify of events when tailing.
    private static final String
     
    private final boolean
    Whether to close and reopen the file whilst waiting for more input.
    private boolean
    The tailer will run as long as this value is true.
  • Constructor Summary

    Constructors
    Constructor
    Description
    Tailer(File file, Charset charset, TailerListener listener, long delayMillis, boolean end, boolean reOpen, int bufSize)
    Creates a Tailer for the given file, with a specified buffer size.
    Tailer(File file, TailerListener listener)
    Creates a Tailer for the given file, starting from the beginning, with the default delay of 1.0s.
    Tailer(File file, TailerListener listener, long delayMillis)
    Creates a Tailer for the given file, starting from the beginning.
    Tailer(File file, TailerListener listener, long delayMillis, boolean end)
    Creates a Tailer for the given file, with a delay other than the default 1.0s.
    Tailer(File file, TailerListener listener, long delayMillis, boolean end, boolean reOpen)
    Creates a Tailer for the given file, with a delay other than the default 1.0s.
    Tailer(File file, TailerListener listener, long delayMillis, boolean end, boolean reOpen, int bufSize)
    Creates a Tailer for the given file, with a specified buffer size.
    Tailer(File file, TailerListener listener, long delayMillis, boolean end, int bufSize)
    Creates a Tailer for the given file, with a specified buffer size.
  • Method Summary

    Modifier and Type
    Method
    Description
    static Tailer
    create(File file, Charset charset, TailerListener listener, long delayMillis, boolean end, boolean reOpen, int bufSize)
    Creates and starts a Tailer for the given file.
    static Tailer
    create(File file, TailerListener listener)
    Creates and starts a Tailer for the given file, starting at the beginning of the file with the default delay of 1.0s
    static Tailer
    create(File file, TailerListener listener, long delayMillis)
    Creates and starts a Tailer for the given file, starting at the beginning of the file
    static Tailer
    create(File file, TailerListener listener, long delayMillis, boolean end)
    Creates and starts a Tailer for the given file with default buffer size.
    static Tailer
    create(File file, TailerListener listener, long delayMillis, boolean end, boolean reOpen)
    Creates and starts a Tailer for the given file with default buffer size.
    static Tailer
    create(File file, TailerListener listener, long delayMillis, boolean end, boolean reOpen, int bufSize)
    Creates and starts a Tailer for the given file.
    static Tailer
    create(File file, TailerListener listener, long delayMillis, boolean end, int bufSize)
    Creates and starts a Tailer for the given file.
    long
    Return the delay in milliseconds.
    Return the file.
    protected boolean
    Gets whether to keep on running.
    private long
    Read new lines.
    void
    run()
    Follows changes in the file, calling the TailerListener's handle method for each new line.
    void
    Allows the tailer to complete its current loop and return.

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

    • DEFAULT_DELAY_MILLIS

      private static final int DEFAULT_DELAY_MILLIS
      See Also:
    • RAF_MODE

      private static final String RAF_MODE
      See Also:
    • DEFAULT_CHARSET

      private static final Charset DEFAULT_CHARSET
    • inbuf

      private final byte[] inbuf
      Buffer on top of RandomAccessFile.
    • file

      private final File file
      The file which will be tailed.
    • charset

      private final Charset charset
      The character set that will be used to read the file.
    • delayMillis

      private final long delayMillis
      The amount of time to wait for the file to be updated.
    • end

      private final boolean end
      Whether to tail from the end or start of file
    • listener

      private final TailerListener listener
      The listener to notify of events when tailing.
    • reOpen

      private final boolean reOpen
      Whether to close and reopen the file whilst waiting for more input.
    • run

      private volatile boolean run
      The tailer will run as long as this value is true.
  • Constructor Details

    • Tailer

      public Tailer(File file, TailerListener listener)
      Creates a Tailer for the given file, starting from the beginning, with the default delay of 1.0s.
      Parameters:
      file - The file to follow.
      listener - the TailerListener to use.
    • Tailer

      public Tailer(File file, TailerListener listener, long delayMillis)
      Creates a Tailer for the given file, starting from the beginning.
      Parameters:
      file - the file to follow.
      listener - the TailerListener to use.
      delayMillis - the delay between checks of the file for new content in milliseconds.
    • Tailer

      public Tailer(File file, TailerListener listener, long delayMillis, boolean end)
      Creates a Tailer for the given file, with a delay other than the default 1.0s.
      Parameters:
      file - the file to follow.
      listener - the TailerListener to use.
      delayMillis - the delay between checks of the file for new content in milliseconds.
      end - Set to true to tail from the end of the file, false to tail from the beginning of the file.
    • Tailer

      public Tailer(File file, TailerListener listener, long delayMillis, boolean end, boolean reOpen)
      Creates a Tailer for the given file, with a delay other than the default 1.0s.
      Parameters:
      file - the file to follow.
      listener - the TailerListener to use.
      delayMillis - the delay between checks of the file for new content in milliseconds.
      end - Set to true to tail from the end of the file, false to tail from the beginning of the file.
      reOpen - if true, close and reopen the file between reading chunks
    • Tailer

      public Tailer(File file, TailerListener listener, long delayMillis, boolean end, int bufSize)
      Creates a Tailer for the given file, with a specified buffer size.
      Parameters:
      file - the file to follow.
      listener - the TailerListener to use.
      delayMillis - the delay between checks of the file for new content in milliseconds.
      end - Set to true to tail from the end of the file, false to tail from the beginning of the file.
      bufSize - Buffer size
    • Tailer

      public Tailer(File file, TailerListener listener, long delayMillis, boolean end, boolean reOpen, int bufSize)
      Creates a Tailer for the given file, with a specified buffer size.
      Parameters:
      file - the file to follow.
      listener - the TailerListener to use.
      delayMillis - the delay between checks of the file for new content in milliseconds.
      end - Set to true to tail from the end of the file, false to tail from the beginning of the file.
      reOpen - if true, close and reopen the file between reading chunks
      bufSize - Buffer size
    • Tailer

      public Tailer(File file, Charset charset, TailerListener listener, long delayMillis, boolean end, boolean reOpen, int bufSize)
      Creates a Tailer for the given file, with a specified buffer size.
      Parameters:
      file - the file to follow.
      charset - the Charset to be used for reading the file
      listener - the TailerListener to use.
      delayMillis - the delay between checks of the file for new content in milliseconds.
      end - Set to true to tail from the end of the file, false to tail from the beginning of the file.
      reOpen - if true, close and reopen the file between reading chunks
      bufSize - Buffer size
  • Method Details

    • create

      public static Tailer create(File file, TailerListener listener, long delayMillis, boolean end, int bufSize)
      Creates and starts a Tailer for the given file.
      Parameters:
      file - the file to follow.
      listener - the TailerListener to use.
      delayMillis - the delay between checks of the file for new content in milliseconds.
      end - Set to true to tail from the end of the file, false to tail from the beginning of the file.
      bufSize - buffer size.
      Returns:
      The new tailer
    • create

      public static Tailer create(File file, TailerListener listener, long delayMillis, boolean end, boolean reOpen, int bufSize)
      Creates and starts a Tailer for the given file.
      Parameters:
      file - the file to follow.
      listener - the TailerListener to use.
      delayMillis - the delay between checks of the file for new content in milliseconds.
      end - Set to true to tail from the end of the file, false to tail from the beginning of the file.
      reOpen - whether to close/reopen the file between chunks
      bufSize - buffer size.
      Returns:
      The new tailer
    • create

      public static Tailer create(File file, Charset charset, TailerListener listener, long delayMillis, boolean end, boolean reOpen, int bufSize)
      Creates and starts a Tailer for the given file.
      Parameters:
      file - the file to follow.
      charset - the character set to use for reading the file
      listener - the TailerListener to use.
      delayMillis - the delay between checks of the file for new content in milliseconds.
      end - Set to true to tail from the end of the file, false to tail from the beginning of the file.
      reOpen - whether to close/reopen the file between chunks
      bufSize - buffer size.
      Returns:
      The new tailer
    • create

      public static Tailer create(File file, TailerListener listener, long delayMillis, boolean end)
      Creates and starts a Tailer for the given file with default buffer size.
      Parameters:
      file - the file to follow.
      listener - the TailerListener to use.
      delayMillis - the delay between checks of the file for new content in milliseconds.
      end - Set to true to tail from the end of the file, false to tail from the beginning of the file.
      Returns:
      The new tailer
    • create

      public static Tailer create(File file, TailerListener listener, long delayMillis, boolean end, boolean reOpen)
      Creates and starts a Tailer for the given file with default buffer size.
      Parameters:
      file - the file to follow.
      listener - the TailerListener to use.
      delayMillis - the delay between checks of the file for new content in milliseconds.
      end - Set to true to tail from the end of the file, false to tail from the beginning of the file.
      reOpen - whether to close/reopen the file between chunks
      Returns:
      The new tailer
    • create

      public static Tailer create(File file, TailerListener listener, long delayMillis)
      Creates and starts a Tailer for the given file, starting at the beginning of the file
      Parameters:
      file - the file to follow.
      listener - the TailerListener to use.
      delayMillis - the delay between checks of the file for new content in milliseconds.
      Returns:
      The new tailer
    • create

      public static Tailer create(File file, TailerListener listener)
      Creates and starts a Tailer for the given file, starting at the beginning of the file with the default delay of 1.0s
      Parameters:
      file - the file to follow.
      listener - the TailerListener to use.
      Returns:
      The new tailer
    • getFile

      public File getFile()
      Return the file.
      Returns:
      the file
    • getRun

      protected boolean getRun()
      Gets whether to keep on running.
      Returns:
      whether to keep on running.
      Since:
      2.5
    • getDelay

      public long getDelay()
      Return the delay in milliseconds.
      Returns:
      the delay in milliseconds.
    • run

      public void run()
      Follows changes in the file, calling the TailerListener's handle method for each new line.
      Specified by:
      run in interface Runnable
    • stop

      public void stop()
      Allows the tailer to complete its current loop and return.
    • readLines

      private long readLines(RandomAccessFile reader) throws IOException
      Read new lines.
      Parameters:
      reader - The file to read
      Returns:
      The new position after the lines have been read
      Throws:
      IOException - if an I/O error occurs.