Lire ou écrire des caractères dans un fichier

     

On appelle fichier de type texte un fichier ne contenant que des caractères (plus précisément leurs codages sous forme d'un octet pour chacun) ; un tel fichier est lisible avec un éditeur de texte quelconque. L'exemple de ce paragraphe présente ce qu'on peut faire de plus simple avec des fichiers de type texte ; on lit des caractères un à un dans un fichier et on écrit ces caractères un à un dans un autre fichier ; on écrit de plus une chaîne de caractères au début du fichier d'écriture.

La classe FileReader (classe d'extraction) permet de lire des caractères dans un fichier. La classe FileWriter (classe d'extraction) permet d'écrire des caractères dans un fichier. Il n'y a pas besoin ici de classe de fonctionnalités. Il ne faut pas oublier de fermer un fichier qui a été ouvert ; cela libère des ressources du systè:me et cela vide d'éventuels tampons dont le contenu pourrait être perdu si on oublie de fermer le fichier.

Dans notre programme, le nom du fichier de lecture est indiqué sur la ligne de commande ; le fichier d'écriture a le même nom que celui de lecture précédé de copie.

L'utilisateur doit indiquer un fichier situé dans le répertoire d'exécution. C'est dans ce même répertoire que se trouvera la copie.

import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

class LireEcrireTexte {
    public static void main(String[] arg) throws IOException {
	String fichierLecture = arg[0];
	FileReader entree = new FileReader(fichierLecture);
	FileWriter sortie = new FileWriter("copie" + fichierLecture);
	int c;
	
	sortie.write("copie de " + fichierLecture + '\n');
	while((c = entree.read()) != -1) sortie.write(c);
	entree.close();
	sortie.close();
    }
}
Si le fichier Essai.txt contient :
bonjour
au revoir
et qu'on le copie avec notre programme, on obtient après exécution un fichier copieEssai.txt contenant :
copie de Essai.txt
bonjour
au revoir:

new FileWriter("copie" + fichierLecture); : le fichier physique dont le nom est indiqué en argument est créé ; s'il existait déjà, le contenu du précédent fichier serait perdu ; le constructeur FileWriter(String nom, boolean append) permettrait d'ouvrir un fichier en écriture en se positionnant à la fin du fichier.
sortie.write("copie de " + fichierLecture + '\n'); : cette méthode, héritée de la classe Writer, permet d'écrire une chaîne de caractères.
(c = entree.read()) != -1 : cette méthode read renvoie un seul caractère sous forme d'un int et renvoie -1 si la fin du flux est atteinte.
sortie.write(c) : cette méthode, héritée de la classe OutputStreamWriter, permet d'écrire un caractère dans le flux concerné ; ce caractère est considéré comme étant un int.

Vous pouvez récupérer ce programme.


© Charon Irène, Télécom ParisTech 2011