Comment ajouter du texte à un fichier existant en Java ?

Lorsqu'on écrit du texte dans un fichier, on écrase généralement le contenu précédemment inséré avec son nouveau texte. Il est possible en Java d'ajouter le nouveau texte à la suite du précédent. Cette technique est notamment utilisée dans les fichiers de log pour enregistrer de nouvelles informations tout en conservant les précédentes.

Si vous travaillez avec la version 7 de Java, la classe Files permet cette possibilité. Il faut indiquer l'option StandardOpenOption.APPEND en troisième argument de la fonction Write. Le premier argument est le chemin vers le fichier dans lequel écrire et le deuxième est un tableau contenant les bits que vous souhaitez écrire dans le fichier.

Try
{
Files.write(Paths.get(monFichier.txt), Mon texte.getBytes(), StandardOpenOption.APPEND);
}
catch (IOException e)
{
//Gestion des exceptions en cas de problème d'accès au fichier
}

La méthode précédente ouvre et ferme le fichier à chaque appel, ce qui peut consommer inutilement des ressources en cas d'écritures multiples dans le même fichier. Pour ce cas, on peut utiliser la classe FileWriter. Elle permet également d'ajouter du texte à la fin du fichier, sans ouvrir et fermer celui-ci à chaque appel. Il faut pour cela indiquer le booléen true en deuxième paramètre lors de la création de l'instance.

try
{
String filename=;
FileWriter fw = new FileWriter(monFichier.txt,true);
fw.write(Mon texte);
fw.close();
}
catch(IOException ioe)
{
System.err.println(IOException: + ioe.getMessage());
}

Si vous avez beaucoup de texte à écrire, vous pouvez faire appel à la classe BufferedWrite. Elle utilise un objet de la classe FileWriter en argument du constructeur. Son fonctionnement interne diffère de cette classe : alors qu'un objet de la classe FileWriter écrit les bits dans un fichier un par un, un objet de la classe BufferedWriter les écrit en une fois, ce qui rend l'écriture plus rapide. Vous pouvez également utiliser un objet de la classe PrintWriter afin de pouvoir appeler la fonction println() pour écrire le texte.

try(FileWriter fw = new FileWriter(monFichier.txt, true);
BufferedWriter bw = new BufferedWriter(fw);
PrintWriter out = new PrintWriter(bw))
{
out.println(Mon texte);
...
out.println(Mon autre texte);
}
catch (IOException e)
{
//Gestion des exceptions en cas de problème d'accès au fichier
}

Si vous travaillez sur une version plus ancienne de Java, il faut utiliser directement la classe FileWriter. Vous pouvez également faire appel aux classes BufferedWriter et PrintWriter, qui ont le même fonctionnement.

Try
{
PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter(monFichier.txt, true)));
out.println(Mon texte);
out.close();
}
catch (IOException e)
{
//Gestion des exceptions en cas de problème d'accès au fichier
}

Si vous travaillez sur un système de log, il existe des librairies externes qui apportent des fonctionnalités supplémentaires. Vous pouvez utiliser Log4j (http://logging.apache.org/log4j/) ou bien Logback (http://logback.qos.ch/).

Java