Inselraus: Ein LowerCaseWriter
Wir wollen im Folgenden einen Filter schreiben, der alle in den Strom geschriebenen Zeichen in Kleinbuchstaben umwandelt. Drei Dinge sind für einen eigenen FilterWriter nötig:
- Die Klasse leitet sich von FilterWriter
- Unser Konstruktor nimmt als Parameter ein
Writer-Objekt und ruft mitsuper(out)den Konstruktor der Oberklasse auf, also FilterWriter. Die Oberklasse speichert das übergebene Argument in der geschützten Objektvariablen out, sodass die Unterklassen darauf zugreifen können. - Wir überlagern die drei
write(…)-Methoden und eventuell nochclose()undflush(). Unserewrite(…)-Methoden führen dann die Filteroperationen aus und geben die wahren Daten an denWriter
class LowerCaseWriter extends FilterWriter {
public LowerCaseWriter( Writer writer ) {
super( writer );
}
@Override
public void write( int c ) throws IOException {
out.write( Character.toLowerCase((char)c) );
}
@Override
public void write( char[] cbuf, int off, int len ) throws IOException {
write( String.valueOf( cbuf ), off, len );
}
@Override
public void write( String s, int off, int len ) throws IOException {
out.write( s.toLowerCase(), off, len );
}
}
Und die Nutzung sieht dann so aus:
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter( new LowerCaseWriter( sw ) );
pw.println( "Eine Zeile für klein und groß" );
System.out.println( sw.toString() );