Ce chapitre est consacré à la présentation du package
java.io
, qui contient les classes de base pour gérer les flux de données, de type caractère ou binaire, et les fichiers. Ce package fait partie des premiers packages disponibles dès la création du langage. Il a été étendu en Java 4 par le package
java.nio
, aussi appelé API NIO, et le sera en Java 7 par l'API NIO2. La présentation de ces deux API dépasse le cadre de ce document.
La zoologie des classes de cette API est assez complexe, et nécessite un peu d'habitude pour bien être maîtrisée. Cela dit, les API fournies sont extrêmement puissantes, à condition de bien en comprendre la philosophie, de comprendre pourquoi telle classe a été créée, pour remplir quel rôle. Tous les problèmes que l’on peut se poser ont leur solution au travers de ces API. Ces solutions sont généralement simples à écrire, à condition d’utiliser les bonnes classes.
L'un des points qui rend l'appréhension des entrées / sorties délicate, est sans aucun doute la portabilité. Comme pour le reste, une application Java doit pouvoir tourner sur n’importe quelle machine, sans recompilation. Il suffit de constater simplement les différences entre l’écriture des chemins et noms de fichiers entre les systèmes Unix et Windows pour entrevoir l’étendue du problème.
La première partie de ce chapitre, assez longue, est consacrée à la présentation de la classe
File
. Cette classe est le point d'entrée de l'accès au système de fichier, que l'on soit sous Unix ou Windows. Une instance de
File
modélise un fichier ou un répertoire, sans que cet élément existe nécessairement.
Ensuite, vient la présentation des flux proprement dit. Nous définirons la notion de flux dans la suite.
Java distingue deux types de flux : les flux de caractères et les flux binaires. La gestion de chacun de ces deux types de flux se fait au travers de classes propres, organisées de façon analogue, comme nous le verrons. Quelques classes permettent de faire la liaison entre ces deux types de flux, nous les verrons également.
Enfin, nous verrons les flux compressés, de type ZIP et GZIP, puisque Java propose des classes pour leur gestion.