Le Tutoriel de Java FilterReader
1. FilterReader
FilterReader est une sous-classe abstraite de la classe Reader, qui est la classe de base utilisée pour créer des sous-classes permettant de lire de manière sélective les caractères requis. Par exemple, vous souhaitez lire un document HTML et ignorer les balises. Vous devez écrire une sous-classe de FilterReader, vous ne pouvez pas utiliser directement FilterReader, car il s'agit d'une classe abstraite.
FilterReader ne lit pas directement les données à partir de l'origine (un fichier, par exemple), mais il gère un autre Reader chargé de lire les données à partir de l'origine. FilterReader exécute de manière sélective les données obtenues à partir de Reader qu'il gère.
Un regard sur la source code de la classe FilterReader montre: Toutes les méthodes dont il hérite de la classe parentale ont été remplacées pour agir en tant que délégué de l'objet Reader qu'il gère:
FilterReader class
package java.io;
public abstract class FilterReader extends Reader {
protected Reader in;
protected FilterReader(Reader in) {
super(in);
this.in = in;
}
public int read() throws IOException {
return in.read();
}
public int read(char cbuf[], int off, int len) throws IOException {
return in.read(cbuf, off, len);
}
public long skip(long n) throws IOException {
return in.skip(n);
}
public boolean ready() throws IOException {
return in.ready();
}
public boolean markSupported() {
return in.markSupported();
}
public void mark(int readAheadLimit) throws IOException {
in.mark(readAheadLimit);
}
public void reset() throws IOException {
in.reset();
}
public void close() throws IOException {
in.close();
}
}
FilterReader constructors
protected FilterReader(Reader in)
2. Examples
Par exemple: Ecrire une sous-classe de FilterReader pour lire le texte HTML mais ignorer les étiquettes (tag).
RemoveHtmlTagReader.java
package org.o7planning.filterreader.ex;
import java.io.FilterReader;
import java.io.IOException;
import java.io.Reader;
public class RemoveHtmlTagReader extends FilterReader {
private boolean intag = false;
public RemoveHtmlTagReader(Reader in) {
super(in);
}
// We override this method.
// The principle will be:
// Read only characters outside of the tags.
@Override
public int read(char[] buf, int from, int len) throws IOException {
int charCount = 0;
while (charCount == 0) {
charCount = super.read(buf, from, len);
if (charCount == -1) {
// Ends of
return -1;
}
int last = from;
for (int i = from; i < from + charCount; i++) {
// If not in tag
if (!this.intag) {
if (buf[i] == '<') {
this.intag = true;
} else {
buf[last++] = buf[i];
}
} else if (buf[i] == '>') {
this.intag = false;
}
}
charCount = last - from;
}
return charCount;
}
// Also need to override this method.
@Override
public int read() throws IOException {
char[] buf = new char[1];
int result = read(buf, 0, 1);
if (result == -1) {
return -1;
} else {
return (int) buf[0];
}
}
}
RemoveHtmlTagTest.java
package org.o7planning.filterreader.ex;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.Reader;
import java.io.StringReader;
public class RemoveHtmlTagTest {
public static void main(String[] args) throws IOException {
// Create a Reader.
Reader in = new StringReader("<h1>Hello \n <b>World</b><h1>");
RemoveHtmlTagReader filterReader = new RemoveHtmlTagReader(in);
BufferedReader br = new BufferedReader(filterReader);
String s = null;
while ((s = br.readLine()) != null) {
System.out.println(s);
}
br.close();
}
}
Output:
Hello
World
Tutoriels Java IO
- Le Tutoriel de Java CharArrayWriter
- Le Tutoriel de Java FilterReader
- Le Tutoriel de Java FilterWriter
- Le Tutoriel de Java PrintStream
- Le Tutoriel de Java BufferedReader
- Le Tutoriel de Java BufferedWriter
- Le Tutoriel de Java StringReader
- Le Tutoriel de Java StringWriter
- Le Tutoriel de Java PipedReader
- Le Tutoriel de Java LineNumberReader
- Le Tutoriel de Java PushbackReader
- Le Tutoriel de Java PrintWriter
- Tutoriel sur les flux binaires Java IO
- Le Tutoriel de Java IO Character Streams
- Le Tutoriel de Java BufferedOutputStream
- Le Tutoriel de Java ByteArrayOutputStream
- Le Tutoriel de Java DataOutputStream
- Le Tutoriel de Java PipedInputStream
- Le Tutoriel de Java OutputStream
- Le Tutoriel de Java ObjectOutputStream
- Le Tutoriel de Java PushbackInputStream
- Le Tutoriel de Java SequenceInputStream
- Le Tutoriel de Java BufferedInputStream
- Le Tutoriel de Java Reader
- Le Tutoriel de Java Writer
- Le Tutoriel de Java FileReader
- Le Tutoriel de Java FileWriter
- Le Tutoriel de Java CharArrayReader
- Le Tutoriel de Java ByteArrayInputStream
- Le Tutoriel de Java DataInputStream
- Le Tutoriel de Java ObjectInputStream
- Le Tutoriel de Java InputStreamReader
- Le Tutoriel de Java OutputStreamWriter
- Le Tutoriel de Java InputStream
- Le Tutoriel de Java FileInputStream
Show More