18/12/07 09:11 Entrées/Sorties Page 1 sur 1 http://www.ukonline.be/programmatio
18/12/07 09:11 Entrées/Sorties Page 1 sur 1 http://www.ukonline.be/programmation/java/tutoriel/chapitre12/index.php Accueil >Programmation >Java >Tutoriel >Principal Copyright © 2000-2007 UKO. Toute reproduction strictement interdite sans autorisation du webmaster Chapitre 11 Suivant Introduction Un programme peut interagir avec le monde extérieur via son entrée standard et ses sorties standards expliquées dans le chapitre 4, mais il s'agit là de données qui sont temporaires, c'est-à-dire qu'elles disparaissent lorsque le programme est fermé. Pour pouvoir stocker des données de manière permanente, on doit utiliser des fichiers qui sont stockés sur le disque dur et sont donc permanent. On peut lire le contenu de ces fichiers et on peut également y écrire des données, il s'agit d'une autre manière pour un programme de communiquer avec le monde extérieur. Les fichiers sont organisés d'une certaine manière, en effet, ils se trouvent sur un disque et dans un certain dossier ou répertoire. Vous pouvez facilement voir les fichiers que vous possédez en utilisant une invite de commande ou alors l'explorateur en mode graphique disponible sur votre système d'exploitation, par exemple explorer sous Windows et konqueror (KDE) ou nautilus (Gnome) sous Linux. Ce chapitre s'intéresse à la manipulation des fichiers et des répertoires dans un premier temps et ensuite, la deuxième partie du chapitre aborde la lecture et l'écriture des fichiers texte. Enfin, pour terminer, la fin du chapitre montre comment procéder pour directement stocker des objets dans un fichier pour pouvoir les récupérer facilement par la suite. Site optimisé pour Firefox avec une résolution 1024x768. Page chargée en 0.0424800 secondes 18/12/07 09:11 Entrées/Sorties : Manipulation des fichiers et répertoires Page 1 sur 4 http://www.ukonline.be/programmation/java/tutoriel/chapitre12/page1.php Accueil >Programmation >Java >Tutoriel >Principal >Chapitre 12 : Fichiers Manipulation des fichiers et répertoires La notion de fichier et leur organisation dépendent du système d'exploitation, en effet, sous Linux, on a par exemple une racine / et puis des répertoires dans lesquels on retrouve d'autre répertoires et des fichiers. Sous Windows, on a en plus la notion de lecteur, et on a donc plusieurs racines et on parle de dossier plutôt que de répertoire. Une autre différence qui apparait est la manière de spécifier le chemin d'un fichier dans l'arborescence du système, sous Windows, on sépare les dossiers par un \, sous Unix par un / et sous MacOS on retrouve des :. En Java, tout est abstrait à un haut niveau et toutes ces notions sont reprises dans une seule classe Java, la classe File qui se trouve dans le package java.io. Racines de l'arborescence Comme dit précédemment, sous Linux, il n'y a qu'une racine, à savoir /, mais sous Windows, les fichiers sont organisés dans des lecteurs physique ou logiques. Pour connaitre ces différentes racines, on utilise la méthode statique listRoots de la classe File. Cette méthode renvoie un tableau des racines du système et pour Linux, le tableau ne contiendra qu'un seul élément bien entendu. Le listing suivant montre comment afficher toutes les racines : 1 File[] roots = File.listRoots(); 2 for (File file : roots) 3 { 4 System.out.println (file); 5 } listing j12.1 Afficher les racines d'un système Sous Windows, on pourrait par exemple avoir la sortie suivante : C:\ D:\ E:\ H:\ I:\ Fichier ou répertoire La classe File permet de représenter les fichiers et les répertoires, mais comment savoir si un objet File représente un fichier ou un répertoire ? On utilise simplement des méthodes de cette classe, deux méthodes booléenne sont intéressantes pour ce faire : isFile et isDirectory qui permettent donc de savoir si on a affaire à un fichier ou un répertoire. 1 File[] roots = File.listRoots(); 2 for (File file : roots) 3 { 4 System.out.println (file + " " + file.isDirectory()); 5 } listing j12.2 Fichier ou répertoire Sous Windows, on pourrait par exemple avoir la sortie suivante : C:\ true D:\ false E:\ true H:\ true I:\ true Chacun des lecteurs physiques ou logiques du système est donc bien un répertoire, sauf le lecteur D:\ qui correspond vraisemblablement à un lecteur de CD ou DVD ne contenant pas de disque à l'intérieur. Existence et création 18/12/07 09:11 Entrées/Sorties : Manipulation des fichiers et répertoires Page 2 sur 4 http://www.ukonline.be/programmation/java/tutoriel/chapitre12/page1.php Un objet de type File représente en fait un chemin abstrait vers un fichier ou un répertoire, il se peut tout à fait que le fichier ou répertoire représenté n'existe pas sur le système, pour savoir si le fichier ou répertoire représenté existe ou pas, il faut utiliser la méthode exists. Si le fichier n'existe pas, on peut le créer en utilisant la méthode createNewFile. L'exemple suivant crée un nouvel objet File et crée le fichier sur le système si celui-ci n'existe pas encore. 1 File file = new File ("monfichier"); 2 if (file.exists()) 3 { 4 System.out.println ("Le fichier existe déjà"); 5 } 6 else 7 { 8 try 9 { 10 if (file.createNewFile()) 11 { 12 System.out.println ("Création du fichier réussie"); 13 } 14 else 15 { 16 System.out.println ("Création du fichier echouée"); 17 } 18 } 19 catch (IOException exception) 20 { 21 System.out.println ("Erreur " + exception.getMessage()); 22 } 23 } listing j12.3 Création d'un fichier On commence donc par créer un objet de type File qui représente un fichier qui s'appelle monfichier. Ce fichier est simplement un fichier qui se trouve dans le même répertoire que le programme Java. Le programme vérifie ensuite si le fichier existe déjà ou pas avec la méthode exists qui renvoie un booléen. Si le fichier n'existe pas encore, on va tenter de le créer avec la méthode createNewFile qui renvoie un booléen si la création a réussi. De plus, cette méthode est susceptible de lancer une exception de type IOException qui représente une erreur d'écriture sur le disque, ou une limitation des droits d'écriture, ... et il faut donc gérer l'erreur avec un bloc try-catch étant donné qu'il s'agit d'une exception sous contrôle. La classe IOException se trouve également dans le package java.io. Si vous n'avez pas encore de fichier monfichier dans le répertoire contenant votre programme Java, à la première exécution du programme, le fichier sera donc créé. Et ensuite, à la seconde exécution, le programme dira que le fichier existe déjà. > java TestFileCreation Création du fichier réussie > java TestFileCreation Le fichier existe déjà Pour créer un répertoire, on a une autre méthode qui est mkdir qui permet de créer le répertoire si celui-ci n'existe pas encore. Parcours d'arborescence On va maintenant s'intéresser à un autre problème, celui qui consiste à parcourir toute une arborescence. Il s'agit donc de partir d'un répertoire et d'ensuite afficher tous les fichiers et répertoires contenu dans celui-ci, et ce de manière récursive. Bien entendu la classe File propose des méthodes qui vont nous aider à atteindre ce but : on a déjà vu la méthode isDirectory qui permet de vérifier si on a affaire à un répertoire ou pas et on va en plus utiliser la méthode listFiles qui renvoie un tableau d'objets de type File représentant le contenu du répertoire. 1 private static void printContent (File file, int level) 2 { 3 for (File f : file.listFiles()) 4 { 5 for (int i = 0; i < level; i++) System.out.print ("|\t"); 18/12/07 09:11 Entrées/Sorties : Manipulation des fichiers et répertoires Page 3 sur 4 http://www.ukonline.be/programmation/java/tutoriel/chapitre12/page1.php 6 7 if (f.isDirectory()) 8 { 9 System.out.println ("+ " + f.getName()); 10 printContent (f, level + 1); 11 } 12 else 13 { 14 System.out.println ("| " + f.getName()); 15 } 16 } 17 } listing j12.4 Méthode pour parcourir une arborescence La méthode est assez simple, elle commence par boucler sur tous les fichiers et répertoires du fichier reçu en paramètre grâce à une boucle for améliorée sur file.listFiles(). Ensuite, si on a affaire à un répertoire, il faut faire un appel récursif. Le reste du code est juste là pour la mise en forme du résultat sur la sortie standard. Le listing suivant donne un exemple d'utilisation de cette méthode avec un résultat que l'on obtient sur la sortie standard. 1 public static void main (String[] args) 2 { 3 File file = new File ("I:\\UKO"); 4 System.out.println ("+ " + file.getName()); 5 printContent (file, 1); 6 } listing j12.5 Exemple de parcours d'un répertoire + UKO | + Java | | + Intro | | | | HelloWorld.class | | | | HelloWorld.java | | + IntroEclipse | | | | .classpath | | | | .project | | | | HelloWorld.class | | | | HelloWorld.java | | + Projet1 | | | | .classpath | | | | .project | | | | Projet1.class | | | | Projet1.java | + LaTeX | | + HelloWorld | | | | HelloWorld.aux | | | | HelloWorld.dvi | | | | HelloWorld.log | | | | HelloWorld.tcp | | | | HelloWorld.tex | | | | HelloWorld.tps | | UKO.lnk Faites attention avec cette méthode sous Linux, en effet, si vous avez des références circulaires, la méthode proposée ici va boucler infiniment. De plus, la méthode listFiles renvoie null si elle est uploads/s3/ java-ch12-serialization.pdf
Documents similaires










-
28
-
0
-
0
Licence et utilisation
Gratuit pour un usage personnel Attribution requise- Détails
- Publié le Oct 16, 2022
- Catégorie Creative Arts / Ar...
- Langue French
- Taille du fichier 1.0364MB