Java FileWriter

La classe Java FileWriter, java.io.FileWriter, permet d’écrire des caractères dans un fichier. A cet égard, le Java FileWriter fonctionne à peu près comme le FileOutputStream, sauf qu’un FileOutputStream est basé sur les octets, alors qu’un FileWriter est basé sur les caractères. Le FileWriter est destiné à écrire du texte, en d’autres termes. Un caractère peut correspondre à un ou plusieurs octets, selon le schéma de codage des caractères utilisé. La classe Java FileWriter est une sous-classe de la classe Java Writer, soit dit en passant.

Exemple de FileWriter

Voici un exemple simple de Java FileWriter:

Writer fileWriter = new FileWriter("data\filewriter.txt");fileWriter.write("data 1");fileWriter.write("data 2");fileWriter.write("data 3");fileWriter.close();

Note : La gestion correcte des exceptions a été sautée ici pour des raisons de clarté. Pour en savoir plus sur la gestion correcte des exceptions, allez à Java IO Exception Handling.

Le FileWriter a d’autres constructeurs aussi, vous permettant de spécifier le fichier à écrire de différentes manières. Regardez dans le JavaDoc officiel pour des infos plus détaillées.

Ecraser ou annexer le fichier

Lorsque vous créez un FileWriter Java, vous pouvez décider si vous voulez écraser tout fichier existant avec le même nom, ou si vous voulez annexer à tout fichier existant. Vous décidez cela en choisissant quel constructeur FileWriter vous utilisez.

Le constructeur FileWriter prenant un seul paramètre, le nom du fichier, écrasera tout fichier existant:

Writer fileWriter = new FileWriter("c:\data\output.txt");

FileWriter a un constructeur qui prend 2 paramètres aussi : Le nom du fichier et un booléen. Le booléen indique s’il faut ajouter ou écraser un fichier existant. Voici deux exemples de Java FileWriter montrant cela:

Writer fileWriter = new FileWriter("c:\data\output.txt", true); //appends to fileWriter fileWriter = new FileWriter("c:\data\output.txt", false); //overwrites file

FileWriter Character Encoding

Le FileWriter suppose que vous voulez coder les octets vers le fichier en utilisant le codage de caractères par défaut pour l’ordinateur sur lequel votre application est exécutée. Ce n’est pas toujours ce que vous voulez, et vous ne pouvez pas le changer !

Si vous voulez spécifier un schéma d’encodage de caractères différent, n’utilisez pas un FileWriter. Utilisez plutôt un OutputStreamWriter sur un FileOutputStream. Le OutputStreamWriter vous permet de spécifier le schéma de codage des caractères à utiliser lors de l’écriture des octets dans le fichier sous-jacent.

write(int)

La méthode Java FileWriter write(int) écrit les 16 bits inférieurs du int à la destination à laquelle le FileWriter est connecté, sous la forme d’un caractère unique. Voici un exemple d’écriture d’un caractère unique sur un FileWriter Java:

FileWriter fileWriter = new FileWriter("data/output.txt");fileWriter.write('A');

write(char)

Le FileWriter Java possède également une méthode write(char) qui peut écrire un tableau de caractères sur la destination à laquelle le FileWriter est connecté. La méthode write(char) renvoie le nombre de caractères effectivement écrits sur le FileWriter. Voici un exemple d’écriture d’un tableau de caractères sur un FileWriter Java:

FileWriter fileWriter = new FileWriter("data/output.txt");char chars = new char{'A','B','C','D','E'};fileWriter.write(chars);

Performances d’écriture

Il est plus rapide d’écrire un tableau de caractères sur un FileWriter Java que d’écrire un caractère à la fois. L’accélération peut être très importante – jusqu’à 10 fois plus élevée ou plus. Il est donc recommandé d’utiliser les méthodes write(char) chaque fois que possible.

L’accélération exacte que vous obtenez dépend du système d’exploitation sous-jacent et du matériel de l’ordinateur sur lequel vous exécutez le code Java. L’accélération dépend de questions telles que la vitesse de la mémoire, la vitesse du disque dur et la taille des tampons, etc.

Mise en mémoire tampon transparente via BufferedWriter

Vous pouvez obtenir une mise en mémoire tampon transparente des octets écrits sur un FileWriter Java en l’enveloppant dans un BufferedWriter Java . Tous les octets écrits dans le BufferedWriter seront d’abord mis en mémoire tampon à l’intérieur d’un tableau d’octets interne dans le BufferedWriter. Lorsque la mémoire tampon est pleine, elle est vidée vers la FileWriter sous-jacente en une seule fois. Voici un exemple d’enveloppement d’un FileWriter Java dans un BufferedWriter:

int bufferSize = 8 * 1024;Writer writer = new BufferedWriter( new FileWriter("c:\data\output-file.txt"), bufferSize );

Vous pouvez lire plus sur le BufferedWriter dans mon tutoriel BufferedWriter.

flush()

La méthode flush() du FileWriter Java vide toutes les données écrites dans le FileWriter vers le fichier sous-jacent. Les données peuvent être mises en mémoire tampon dans la mémoire du système d’exploitation quelque part, même si votre code Java les a écrites sur le FileWriter. En appelant flush(), vous pouvez vous assurer que toute donnée mise en mémoire tampon sera vidée (écrite) sur le disque. Voici un exemple de vidage des données écrites dans un FileWriter Java en appelant sa méthode flush():

fileWriter.flush();

Fermeture d’un FileWriter

Lorsque vous avez fini d’écrire des caractères dans un FileWriter Java, vous devez vous souvenir de le fermer. La fermeture d’un FileWriter se fait en appelant sa méthode close(). Voici à quoi ressemble la fermeture d’un FileWriter Java :

fileWriter.close();

Vous pouvez également utiliser la construction try-with-resources introduite dans Java 7. Voici comment utiliser et fermer une apparence FileWriter avec la construction try-with-resources:

try(FileWriter fileWriter = new FileWriter("data\filewriter.txt") ){ fileWriter.write("data 1"); fileWriter.write("data 2"); fileWriter.write("data 3");}

Leave a Reply