La classe File ne sert pas à proprement parler à lire ou à écrire dans un répertoire,
mais à accéder à certaines informations d'un fichier désigné par un chemin d'accès,
ou à effectuer certaines opérations (e.g. créer un sous-répertoire dans un répertoire donné,
effacer un fichier,
obtenir la liste des fichiers et sous-répertoires d'un répertoire donné,
etc. → voir l'API).
Cette classe fait partie, comme la plupart des classes dont vous aurez besoin pour manipuler des fichiers,
du paquet
Pour créer une instance de File, on peut utiliser par exemple son constructeur qui prend en argument
la chaîne de caractères contenant son chemin absolu :
File monFichier = new File ("/tmp/fichierTest.txt"); System.out.println ("Existe déjà ? " + String.valueOf (monFichier.exists ())); monFichier = new File ("/tmp"); System.out.println ("Existe déjà ? " + String.valueOf (monFichier.exists ())); System.out.println("Fichier ? " + String.valueOf(monFichier.isFile())); System.out.println("Répertoire ? " + String.valueOf(monFichier.isDirectory())); File[] listeFichier = monFichier.listFiles(); for (int i = 0; i < listeFichier.length; i++) { monFichier = listeFichier[i]; String typeFich; if (monFichier.isDirectory()) typeFich = "[D] "; else typeFich = "[F] "; System.out.println(typeFich + monFichier.getAbsolutePath()); }
Il existe plusieurs types de fichiers et plusieurs manières d'écrire dedans.
Nous aborderons ici une des méthodes possibles pour écrire dans un fichier texte.
L'ensemble des classes permettant de gérer les flux d'entrée-sortie
ne sera pas étudié. Il s'agit de vous donnez une recette pour réaliser,
de manière facultative, la partie du projet qui consiste à écrire les résultats
de l'extraction des triplets syntaxiques dans un fichier.
Il s'agit de créer une instance de la classe
File monFichier = new File ("/tmp/sortie.txt"); FileOutputStream fos = new FileOutputStream(monFichier); OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8");
Il ne vous reste plus qu'à écrire dans votre fichier.
Attention, la méthode
osw.write ("Première ligne\n"); osw.write ("Deuxième ligne\n");
Attention, une fois terminée l'écriture dans le fichier, il vous faut fermer le flux. Si vous oubliez, le fichier risque d'être vide ou de ne pas contenir tout ce que vous y avez écrit.
osw.close ();
Si vous observez, dans l'API, le constructeur de la classe
File monFichier = new File ("/tmp/sortie.txt"); try { FileOutputStream fos = new FileOutputStream(monFichier); OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8"); osw.write ("Première ligne\n"); osw.write ("Deuxième ligne\n"); osw.close (); } catch (IOException e) { System.out.println ("Pb d'écriture dans le fichier " + monFichier.getAbsolutePath ()); }
À noter : l'ouverture, l'écriture et la fermeture du fichier peuvent être opérées à des endroits différents dans votre code. Exemple :
package monPaquet; import java.io.*; public class FileHelper { private OutputStreamWriter writer; public void openFile (String filePath) { File monFichier = new File (filePath); try { FileOutputStream fos = new FileOutputStream(monFichier); writer = new OutputStreamWriter(fos, "UTF-8"); } catch (IOException e) { e.printStackTrace(); System.out.println("Pb ouveture " + filePath); } } public void writeToFile (String str) { try { writer.write(str); } catch (Exception e) { e.printStackTrace(); System.out.println("Pb ecriture flux (" + str + ")"); } } public void closeFile () { try { writer.close (); } catch (Exception e) { e.printStackTrace(); System.out.println("Pb fermeture flux"); } } public static void main (String args[]) { FileHelper helper = new FileHelper (); helper.openFile ("/tmp"); // après exécution de openFile, une instance de OutputStreamWriter // est créée. Elle est stockée dans le membre writer de l'objet helper // do sth helper.writeToFile ("Texte à écrire dans le fichier"); // do sth else helper.writeToFile ("Autre texte à écrire dans le fichier"); helper.close (); } }