Le Tutoriel de Java FilterWriter
1. FilterWriter
FilterWriter est une sous-classe abstraite de la classe Writer. C'est la classe de base pour créer des sous-classes utilisées pour écrire de manière sélective les caractères requis.
FilterWriter n'écrit pas directement les caractères dans l'objectif (le fichier par exemple), mais gère un autre Writer qui est responsable de l'écriture des données sur l'objectif. FilterWriter filtre ou traite les caractères qui y sont écrits, puis écrit les résultats dans Writer qu'il gère.
Observer le code source de la classe FilterWriter: Toutes les méthodes dont elle hérite de la superclasse sont remplacées pour agir en tant que proxy de l'objet Writer qu'elle gère:
FilterWriter
public abstract class FilterWriter extends Writer {
protected Writer out;
protected FilterWriter(Writer out) {
super(out);
this.out = out;
}
public void write(int c) throws IOException {
out.write(c);
}
public void write(char cbuf[], int off, int len) throws IOException {
out.write(cbuf, off, len);
}
public void write(String str, int off, int len) throws IOException {
out.write(str, off, len);
}
public void flush() throws IOException {
out.flush();
}
public void close() throws IOException {
out.close();
}
}
FilterWriter constructors
protected FilterWriter(Writer out)
2. Examples
ROT13 est un chiffrement par substitution de lettre (letter substitution cipher) simple, qui remplace chaque lettre par une autre qui se trouve à la treizième position après celle-ci dans l'alphabet. ROT13 est un cas simple du code César (Caesar cipher).
Vous trouverez ci-dessous un tableau de lettres et leurs substitutions correspondantes comme résultat de l'utilisation de l'algorithme ROT13.
L'alphabet Latin standard se compose de 26 lettres (2x13). Fondamentalement, l'algorithme ROT13 remplace une lettre par une autre et utilise ce même algorithme pour inverser le résultat. Par exemple, l'algorithme ROT13 transforme la lettre "A" en "N" et utilise l'algorithme ROT13 pour "N" pour obtenir "A" comme substitut.
ROT13 est souvent considéré comme un excellent exemple de cryptage (encryption) faible.
La classe ROT13 suivante fournit une méthode de rotation(int) statique qui accepte une lettre en entrée et renvoie une lettre de remplacement en sortie à l'aide de l'algorithme ROT13:
ROT13.java
package org.o7planning.filterwriter.ex;
public class ROT13 {
/**
* <pre>
* a <==> n
* b <==> o
* c <==> p
* d <==> q
* e <==> r
* ...
* y <==> l
* z <==> m
* </pre>
*/
public static int rotate(int inChar) {
int outChar;
if (inChar >= (int) 'a' && inChar <= (int) 'z') {
outChar = (((inChar - 'a') + 13) % 26) + 'a';
} else if (inChar >= (int) 'A' && inChar <= (int) 'Z') {
outChar = (((inChar - 'A') + 13) % 26) + 'A';
} else {
outChar = inChar;
}
return outChar;
}
// Test
public static void main(String[] args) {
for (char ch = 'a'; ch <= 'z'; ch++) {
char m = (char) rotate(ch);
System.out.println(ch + " ==> " + m);
}
System.out.println(" --- ");
for (char ch = 'A'; ch <= 'Z'; ch++) {
char m = (char) rotate(ch);
System.out.println(ch + " ==> " + m);
}
}
}
Ecrire la classe ROT13Writer étendue à partir de la classe FilterWriter. Les caractères écrits dans ROT13Writer seront remplacés à l'aide de l'algorithme ROT13:
ROT13Writer.java
package org.o7planning.filterwriter.ex;
import java.io.FilterWriter;
import java.io.IOException;
import java.io.Writer;
public class ROT13Writer extends FilterWriter {
public ROT13Writer(Writer out) {
super(out);
}
@Override
public void write(int outChar) throws IOException {
super.write(ROT13.rotate(outChar));
}
@Override
public void write(char[] cbuf, int offset, int length) throws IOException {
char[] tempbuf = new char[length];
for (int i = 0; i < length; i++) {
tempbuf[i] = (char) ROT13.rotate(cbuf[offset + i]);
}
super.write(tempbuf, 0, length);
}
@Override
public void write(String str, int off, int len) throws IOException {
char[] cbuf = str.toCharArray();
this.write(cbuf, off, len);
}
}
Un exemple de ROT13Writer:
ROT13WriterTest1.java
package org.o7planning.filterwriter.ex;
import java.io.FilterWriter;
import java.io.IOException;
import java.io.StringWriter;
import java.io.Writer;
public class ROT13WriterTest1 {
public static void main(String[] args) throws IOException {
Writer targetWriter = new StringWriter();
FilterWriter filterWriter = new ROT13Writer(targetWriter);
String inputString = "Hello";
filterWriter.write(inputString);
filterWriter.close();
String outputString = targetWriter.toString();
System.out.println(inputString + " ==> " + outputString);
}
}
Output:
Hello ==> Uryyb
Un exemple sur l'utilisation de ROT13Writer pour écrire les données dans le fichier:
ROT13WriterTest2.java
package org.o7planning.filterwriter.ex;
import java.io.File;
import java.io.FileWriter;
import java.io.FilterWriter;
import java.io.IOException;
import java.io.Writer;
public class ROT13WriterTest2 {
public static void main(String[] args) throws IOException {
// Windows: C:/somedir/rot13-out-file.txt
File outFile = new File("/Volumes/Data/test/rot13-out-file.txt");
outFile.getParentFile().mkdirs();
Writer targetWriter = new FileWriter(outFile);
FilterWriter filterWriter = new ROT13Writer(targetWriter);
String inputString = "Uryyb";
filterWriter.write(inputString);
filterWriter.close();
}
}
Output:
rot13-out-file.txt
Hello
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