Java - FilterReader Class



Introduction

The Java.io.FilterReader class is for reading filtered character streams. Following are the important points about FilterReader −

  • The class itself provides default methods that pass all requests to the contained stream.

  • The Subclasses of FilterReader should override some of these methods and may also provide additional methods and fields.

Class declaration

Following is the declaration for Java.io.FilterReader class −

public abstract class FilterReader
   extends Reader

Field

Following are the fields for Java.io.FilterReader class −

  • protected Reader in − This is the character-input stream.

  • protected Object lock − This is the object used to synchronize operations on this stream.

Class constructors

Sr.No.Constructor & Description
1

protected FilterReader(Reader in)

This creates a new filtered reader.

Class methods

Sr.No.Method & Description
1void close()

This method closes the stream and releases any system resources associated with it.

2void mark(int readAheadLimit)

This method marks the present position in the stream.

3boolean markSupported()

This method tells whether this stream supports the mark() operation.

4int read()

This method reads a single character.

5int read(char[] cbuf, int off, int len)

This method reads characters into a portion of an array.

6boolean ready()

This method tells whether this stream is ready to be read.

7void reset()

This method resets the stream.

8long skip(long n)

This method skips characters.

Methods inherited

This class inherits methods from the following classes −

  • Java.io.Reader
  • Java.io.Object

Example - Using close() with BufferedReader (Automatic Closure)

The following example shows the usage of Java FilterReader close() method.

FilterReaderDemo.java

package com.tutorialspoint;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class FilterReaderDemo {
   public static void main(String[] args) {
      try (BufferedReader fr = new BufferedReader(new FileReader("example.txt"))) {
         int data;
         while ((data = fr.read()) != -1) { // Read character by character
            System.out.print((char) data);
         }
         // No need to manually close, try-with-resources handles it
      } catch (IOException e) {
         e.printStackTrace();
      }
   }
}

Output(if example.txt contains "Hello")

Let us compile and run the above program, this will produce the following result−

Hello

Explanation

  • Uses BufferedReader, a subclass of FilterReader, to read "example.txt".

  • Reads characters one at a time and prints them.

  • Uses try-with-resources, which automatically calls close().

Example - Using mark(int readLimit) with BufferedReader

The following example shows the usage of Java FilterReader mark(int readAheadLimit) method.

FilterReaderDemo.java

package com.tutorialspoint;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class FilterReaderDemo {
   public static void main(String[] args) {
      try (BufferedReader fr = new BufferedReader(new FileReader("example.txt"))) {
         System.out.println("Mark supported? " + fr.markSupported());

         // Read and print first character
         System.out.print((char) fr.read());

         // Mark the current position
         fr.mark(5); // Can read up to 5 characters before mark expires

         // Read next two characters
         System.out.print((char) fr.read());
         System.out.print((char) fr.read());

         // Reset back to the marked position
         fr.reset();

         // Read again from the marked position
         System.out.print((char) fr.read());
         System.out.print((char) fr.read());

      } catch (IOException e) {
         e.printStackTrace();
      }
   }
}

Output(if example.txt contains "Hello")

Let us compile and run the above program, this will produce the following result−

Mark supported? true
Helo
elo

Explanation

  • Uses BufferedReader, which supports marking.

  • Marks the position after reading one character.

  • Reads two more characters.

  • Resets to the marked position.

  • Reads again from the marked position.

Example - Reading One Character at a Time Using BufferedReader

The following example shows the usage of Java FilterReader read() method.

FilterReaderDemo.java

package com.tutorialspoint;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class FilterReaderDemo {
   public static void main(String[] args) {
      try (BufferedReader fr = new BufferedReader(new FileReader("example.txt"))) {
         int data;
         while ((data = fr.read()) != -1) { // Read character by character
            System.out.print((char) data); // Convert integer to character
         }
      } catch (IOException e) {
         e.printStackTrace();
      }
   }
}

Output(if example.txt contains "Hello")

Let us compile and run the above program, this will produce the following result−

Hello

Explanation

  • Uses BufferedReader, a subclass of FilterReader.

  • Reads one character at a time using read().

  • Converts the integer ASCII/Unicode value to a character ((char) data).

  • Stops when read() returns -1 (EOF reached).