Package org.apache.commons.io.input

# Class ReversedLinesFileReader

java.lang.Object
org.apache.commons.io.input.ReversedLinesFileReader

All Implemented Interfaces:
  `Closeable`, `AutoCloseable`, `IOIterable<String>`

public class ReversedLinesFileReader extends Object implements Closeable, IOIterable<String>
Reads lines in a file reversely (similar to a BufferedReader, but starting at the last line). Useful for e.g. searching in log files.

To build an instance, use `ReversedLinesFileReader.Builder`.

For example:

     try (ReversedLinesFileReader reader = ReversedLinesFileReader.builder()
       .setPath(path)
       .setBufferSize(4096)
       .setCharset(StandardCharsets.UTF_8)
       .get()) {
          reader.forEach(line -> System.out.println(line));
     }

Since:
  2.2
See Also:
  - `ReversedLinesFileReader.Builder`

- ## Nested Class Summary

  Nested Classes
  Modifier and Type
  Class
  Description
  `static class`
  `ReversedLinesFileReader.Builder`
  Builds a new `ReversedLinesFileReader`.

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `ReversedLinesFileReader(File file)`
  Deprecated.
  Use `builder()`, `ReversedLinesFileReader.Builder`, and `ReversedLinesFileReader.Builder.get()`
  `ReversedLinesFileReader(File file, int blockSize, String charsetName)`
  Deprecated.
  Use `builder()`, `ReversedLinesFileReader.Builder`, and `ReversedLinesFileReader.Builder.get()`
  `ReversedLinesFileReader(File file, int blockSize, Charset charset)`
  Deprecated.
  Use `builder()`, `ReversedLinesFileReader.Builder`, and `ReversedLinesFileReader.Builder.get()`
  `ReversedLinesFileReader(File file, Charset charset)`
  Deprecated.
  Use `builder()`, `ReversedLinesFileReader.Builder`, and `ReversedLinesFileReader.Builder.get()`
  `ReversedLinesFileReader(Path file, int blockSize, String charsetName)`
  Deprecated.
  Use `builder()`, `ReversedLinesFileReader.Builder`, and `ReversedLinesFileReader.Builder.get()`
  `ReversedLinesFileReader(Path file, int blockSize, Charset charset)`
  Deprecated.
  Use `builder()`, `ReversedLinesFileReader.Builder`, and `ReversedLinesFileReader.Builder.get()`
  `ReversedLinesFileReader(Path file, Charset charset)`
  Deprecated.
  Use `builder()`, `ReversedLinesFileReader.Builder`, and `ReversedLinesFileReader.Builder.get()`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `static ReversedLinesFileReader.Builder`
  `builder()`
  Constructs a new `ReversedLinesFileReader.Builder`.
  `void`
  `close()`
  Closes underlying resources.
  `IOIterator<String>`
  `iterator()`
  Like `Iterable.iterator()`.
  `String`
  `readLine()`
  Returns the lines of the file from bottom to top.
  `List<String>`
  `readLines(int lineCount)`
  Returns `lineCount` lines of the file from bottom to top.
  `String`
  `toString(int lineCount)`
  Returns the last `lineCount` lines of the file.
  `Iterable<String>`
  `unwrap()`
  Unwraps this instance and returns the underlying `Iterable`.

  ### Methods inherited from class java.lang.Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

  ### Methods inherited from interface org.apache.commons.io.function.IOIterable

  `forEach, spliterator`

- ## Constructor Details

  - ### ReversedLinesFileReader

    @Deprecated public ReversedLinesFileReader(File file) throws IOException
    Deprecated.
    Use `builder()`, `ReversedLinesFileReader.Builder`, and `ReversedLinesFileReader.Builder.get()`
    Constructs a ReversedLinesFileReader with default block size of 4KB and the virtual machine's `default charset`.
    Parameters:
      `file` - the file to be read
    Throws:
      `IOException` - if an I/O error occurs.

  - ### ReversedLinesFileReader

    @Deprecated public ReversedLinesFileReader(File file, Charset charset) throws IOException
    Deprecated.
    Use `builder()`, `ReversedLinesFileReader.Builder`, and `ReversedLinesFileReader.Builder.get()`
    Constructs a ReversedLinesFileReader with default block size of 4KB and the specified encoding.
    Parameters:
      `file` - the file to be read
      `charset` - the charset to use, null uses the default Charset.
    Throws:
      `IOException` - if an I/O error occurs.
    Since:
      2.5

  - ### ReversedLinesFileReader

    @Deprecated public ReversedLinesFileReader(File file, int blockSize, Charset charset) throws IOException
    Deprecated.
    Use `builder()`, `ReversedLinesFileReader.Builder`, and `ReversedLinesFileReader.Builder.get()`
    Constructs a ReversedLinesFileReader with the given block size and encoding.
    Parameters:
      `file` - the file to be read
      `blockSize` - size of the internal buffer (for ideal performance this should match with the block size of the underlying file system).
      `charset` - the encoding of the file, null uses the default Charset.
    Throws:
      `IOException` - if an I/O error occurs.
    Since:
      2.3

  - ### ReversedLinesFileReader

    @Deprecated public ReversedLinesFileReader(File file, int blockSize, String charsetName) throws IOException
    Deprecated.
    Use `builder()`, `ReversedLinesFileReader.Builder`, and `ReversedLinesFileReader.Builder.get()`
    Constructs a ReversedLinesFileReader with the given block size and encoding.
    Parameters:
      `file` - the file to be read
      `blockSize` - size of the internal buffer (for ideal performance this should match with the block size of the underlying file system).
      `charsetName` - the encoding of the file, null uses the default Charset.
    Throws:
      `IOException` - if an I/O error occurs
      `UnsupportedCharsetException` - if the encoding is not supported

  - ### ReversedLinesFileReader

    @Deprecated public ReversedLinesFileReader(Path file, Charset charset) throws IOException
    Deprecated.
    Use `builder()`, `ReversedLinesFileReader.Builder`, and `ReversedLinesFileReader.Builder.get()`
    Constructs a ReversedLinesFileReader with default block size of 4KB and the specified encoding.
    Parameters:
      `file` - the file to be read
      `charset` - the charset to use, null uses the default Charset.
    Throws:
      `IOException` - if an I/O error occurs.
    Since:
      2.7

  - ### ReversedLinesFileReader

    @Deprecated public ReversedLinesFileReader(Path file, int blockSize, Charset charset) throws IOException
    Deprecated.
    Use `builder()`, `ReversedLinesFileReader.Builder`, and `ReversedLinesFileReader.Builder.get()`
    Constructs a ReversedLinesFileReader with the given block size and encoding.
    Parameters:
      `file` - the file to be read
      `blockSize` - size of the internal buffer (for ideal performance this should match with the block size of the underlying file system).
      `charset` - the encoding of the file, null uses the default Charset.
    Throws:
      `IOException` - if an I/O error occurs.
    Since:
      2.7

  - ### ReversedLinesFileReader

    @Deprecated public ReversedLinesFileReader(Path file, int blockSize, String charsetName) throws IOException
    Deprecated.
    Use `builder()`, `ReversedLinesFileReader.Builder`, and `ReversedLinesFileReader.Builder.get()`
    Constructs a ReversedLinesFileReader with the given block size and encoding.
    Parameters:
      `file` - the file to be read
      `blockSize` - size of the internal buffer (for ideal performance this should match with the block size of the underlying file system).
      `charsetName` - the encoding of the file, null uses the default Charset.
    Throws:
      `IOException` - if an I/O error occurs
      `UnsupportedCharsetException` - if the encoding is not supported
    Since:
      2.7

- ## Method Details

  - ### builder

    public static ReversedLinesFileReader.Builder builder()
    Constructs a new `ReversedLinesFileReader.Builder`.
    Returns:
      a new `ReversedLinesFileReader.Builder`.
    Since:
      2.12.0

  - ### close

    public void close() throws IOException
    Closes underlying resources.
    Specified by:
      `close` in interface `AutoCloseable`
    Specified by:
      `close` in interface `Closeable`
    Throws:
      `IOException` - if an I/O error occurs.

  - ### iterator

    public IOIterator<String> iterator()
    Description copied from interface: `IOIterable`
    Like `Iterable.iterator()`.
    Specified by:
      `iterator` in interface `IOIterable<String>`
    Returns:
      See `delegate`.
    See Also:
      - `Iterable.iterator()`

  - ### readLine

    public String readLine() throws IOException
    Returns the lines of the file from bottom to top.
    Returns:
      the next line or null if the start of the file is reached
    Throws:
      `IOException` - if an I/O error occurs.

  - ### readLines

    public List<String> readLines(int lineCount) throws IOException
    Returns `lineCount` lines of the file from bottom to top.

    If there are less than `lineCount` lines in the file, then that's what you get.

    Note: You can easily flip the result with `Collections.reverse(List)`.

    Parameters:
      `lineCount` - How many lines to read.
    Returns:
      A new list
    Throws:
      `IOException` - if an I/O error occurs.
    Since:
      2.8.0

  - ### toString

    public String toString(int lineCount) throws IOException
    Returns the last `lineCount` lines of the file.

    If there are less than `lineCount` lines in the file, then that's what you get.

    Parameters:
      `lineCount` - How many lines to read.
    Returns:
      A String.
    Throws:
      `IOException` - if an I/O error occurs.
    Since:
      2.8.0

  - ### unwrap

    public Iterable<String> unwrap()
    Description copied from interface: `IOIterable`
    Unwraps this instance and returns the underlying `Iterable`.

    Implementations may not have anything to unwrap and that behavior is undefined for now.

    Specified by:
      `unwrap` in interface `IOIterable<String>`
    Returns:
      the underlying Iterable.