La classe Java FileWriter, java.io.FileWriter
, permet d’écrire des caractères dans un fichier. À cet égard, l’éditeur de fichiers Java fonctionne un peu comme le FileOutputStream
, sauf qu’un FileOutputStream
est basé sur des octets, tandis qu’un FileWriter
est basé sur des 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 de caractères utilisé. La classe Java FileWriter
est d’ailleurs une sous-classe de la classe Java Writer.
Exemple de FileWriter
Voici un exemple Java simple 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 appropriée des exceptions a été ignorée ici par souci de clarté. Pour en savoir plus sur la gestion correcte des exceptions, accédez à Gestion des exceptions Java IO.
Le FileWriter
a également d’autres constructeurs, vous permettant de spécifier le fichier dans lequel écrire de différentes manières. Regardez dans le JavaDoc officiel pour des informations plus détaillées.
Écraser par rapport à Ajouter le fichier
Lorsque vous créez un Java FileWriter
, vous pouvez décider si vous souhaitez écraser n’importe quel fichier existant avec le même nom ou si vous souhaitez ajouter à n’importe quel fichier existant. Vous décidez cela en choisissant le constructeur FileWriter
que vous utilisez.
Le constructeur FileWriter
prenant un seul paramètre, le nom de fichier, écrasera tout fichier existant:
Writer fileWriter = new FileWriter("c:\data\output.txt");
FileWriter
a un constructeur qui prend également 2 paramètres: le nom du fichier et un booléen. Le booléen indique s’il faut ajouter ou écraser un fichier existant. Voici deux exemples Java FileWriter
montrant que:
Writer fileWriter = new FileWriter("c:\data\output.txt", true); //appends to fileWriter fileWriter = new FileWriter("c:\data\output.txt", false); //overwrites file
Encodage de caractères FileWriter
Le FileWriter
suppose que vous souhaitez encoder les octets dans le fichier en utilisant le codage de caractères par défaut pour l’ordinateur sur lequel votre application s’exécute. Ce n’est peut-être pas toujours ce que vous voulez, et vous ne pouvez pas le changer!
Si vous souhaitez spécifier un schéma de codage de caractères différent, n’utilisez pas FileWriter
. Utilisez plutôt un OutputStreamWriter
sur un FileOutputStream
. Le OutputStreamWriter
vous permet de spécifier le schéma de codage de caractères à utiliser lors de l’écriture d’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é, en un seul caractère. Voici un exemple d’écriture d’un seul caractère dans un Java FileWriter
:
FileWriter fileWriter = new FileWriter("data/output.txt");fileWriter.write('A');
write(char)
Java FileWriter
a également une méthode write(char)
qui peut écrire un tableau de caractères vers la destination à laquelle le FileWriter
est connecté. La méthode write(char)
renvoie le nombre de caractères réellement écrits dans la FileWriter
. Voici un exemple d’écriture d’un tableau de caractères dans un Java FileWriter
:
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 éditeur de fichiers Java que d’écrire un caractère à la fois. L’accélération peut être assez importante – jusqu’à 10 fois plus élevée ou plus. Par conséquent, il est recommandé d’utiliser les méthodes write(char)
dans la mesure du possible.
L’accélération exacte que vous obtenez dépend du système d’exploitation et du matériel sous-jacents de l’ordinateur sur lequel vous exécutez le code Java. L’accélération dépend de problèmes tels 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 dans un Java FileWriter
en l’enveloppant dans un Java BufferedWriter. Tous les octets écrits dans le BufferedWriter
seront d’abord mis en mémoire tampon dans un tableau d’octets interne dans le BufferedWriter
. Lorsque le tampon est plein, le tampon est vidé au FileWriter
sous-jacent en même temps. Voici un exemple d’encapsulation d’un Java FileWriter
dans un BufferedWriter
:
int bufferSize = 8 * 1024;Writer writer = new BufferedWriter( new FileWriter("c:\data\output-file.txt"), bufferSize );
Vous pouvez en savoir plus sur le BufferedWriter
dans mon tutoriel BufferedWriter.
flush()
La méthode flush()
de Java FileWriter
vide toutes les données écrites dans le FileWriter
dans 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 l’a écrite dans le FileWriter
. En appelant flush()
, vous pouvez vous assurer que toutes les données mises en mémoire tampon seront vidées (écrites) sur le disque. Voici un exemple de vidage des données écrites dans un Java FileWriter
en appelant sa méthode flush()
:
fileWriter.flush();
Fermeture d’un FileWriter
Lorsque vous avez terminé d’écrire des caractères sur un Java FileWriter
, n’oubliez pas de le fermer. La fermeture d’un FileWriter
se fait en appelant sa méthode close()
. Voici à quoi ressemble la fermeture d’un Java FileWriter
:
fileWriter.close();
Vous pouvez également utiliser la construction try-with-resources introduite dans Java 7. Voici comment utiliser et fermer un look 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");}