src/main/java/com/github/davidmoten/rx/FileObservable.java
public final static Observable<String> tailTextFile(File file, long startPosition,
            int chunkSize, Charset charset, Observable<?> events) {
        Preconditions.checkNotNull(file);
        Preconditions.checkNotNull(charset);
        Preconditions.checkNotNull(events);
        return toLines(events.lift(new OperatorFileTailer(file, startPosition, chunkSize))
                .onBackpressureBuffer(), charset);
    }
public final static Observable<String> tailTextFile(File file, long startPosition,
            int chunkSize, Charset charset, Observable<?> events) {
        Preconditions.checkNotNull(file);
        Preconditions.checkNotNull(charset);
        Preconditions.checkNotNull(events);
        return toLines(events.lift(new OperatorFileTailer(file, startPosition, chunkSize))
                .onBackpressureBuffer(), charset);
    }
Returns an {@link Observable} of String that uses the given events stream
to trigger checks on file change so that new lines can be read and
emitted.

@param file
the file to tail, cannot be null
@param startPosition
start tailing file at position in bytes
@param chunkSize
max array size of each element emitted by the Observable. Is
also used as the buffer size for reading from the file. Try
{@link FileObservable#DEFAULT_MAX_BYTES_PER_EMISSION} if you
don't know what to put here.
@param charset
the character set to use to decode the bytes to a string
@param events
trigger a check for file changes. Use
{@link Observable#interval(long, TimeUnit)} for example.
@return observable of strings