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