src/main/java/com/github/davidmoten/rx/FileObservable.java
public final static Observable<String> tailTextFile(File file, long startPosition,
            long sampleTimeMs, Charset charset) {
        return toLines(tailFile(file, startPosition, sampleTimeMs, DEFAULT_MAX_BYTES_PER_EMISSION),
                charset);
    }
public final static Observable<String> tailTextFile(File file, long startPosition,
            long sampleTimeMs, Charset charset) {
        return toLines(tailFile(file, startPosition, sampleTimeMs, DEFAULT_MAX_BYTES_PER_EMISSION),
                charset);
    }
Returns an {@link Observable} that uses NIO {@link WatchService} (and a
dedicated thread) to push modified events to an observable that reads and
reports new lines to a subscriber. The NIO WatchService MODIFY and
OVERFLOW events are sampled according to <code>sampleTimeMs</code> so
that lots of discrete activity on a file (for example a log file with
very frequent entries) does not prompt an inordinate number of file reads
to pick up changes. File create events are not sampled and are always
passed through.

@param file
the file to tail
@param startPosition
start tailing file at position in bytes
@param sampleTimeMs
sample time in millis for MODIFY and OVERFLOW events
@param charset
the character set to use to decode the bytes to a string
@return observable of strings