Java FileWriter

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");}

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.