In the following we will add a new reader class that is called LowerCaseReader.
It will read characters from a character-based stream and convert all characters to lowercase.
LowerCaseReader class is a concrete decorator class in the Reader class family.
It inherits from the FilterReader class.
LowerCaseReader needs to provide a constructor that will accept a Reader object.
class LowerCaseReader extends FilterReader { public LowerCaseReader(Reader in) { // Code for the constructor goes here } // More code goes here }
import java.io.BufferedReader; import java.io.FileReader; import java.io.FilterReader; import java.io.IOException; import java.io.Reader; public class Main { public static void main(String[] args) throws Exception { String fileName = "text.txt"; LowerCaseReader lcr = new LowerCaseReader(new FileReader(fileName)); int c = -1;/*from w w w .j a va 2 s .c o m*/ while ((c = lcr.read()) != -1) { System.out.print((char) c); } lcr.close(); BufferedReader br = new BufferedReader(new LowerCaseReader(new FileReader( fileName))); String str = null; while ((str = br.readLine()) != null) { System.out.println(str); } br.close(); } } class LowerCaseReader extends FilterReader { public LowerCaseReader(Reader in) { super(in); } @Override public int read(char[] cbuf, int off, int len) throws IOException { int count = super.read(cbuf, off, len); if (count != -1) { // Convert all read characters to lowercase int limit = off + count; for (int i = off; i < limit; i++) { cbuf[i] = Character.toLowerCase(cbuf[i]); } } return count; } }