L'écriture et la lecture de fichiers impliquent l'utilisation des flux (streams). Ces derniers représentent des canaux de transmission de données à partir d'une source ou vers une destination.

Dans ces canaux, deux types d'informations peuvent transiter de l'application vers un fichier ou inversement. Il s'agît de flux de données binaires ou de caractères. Cette distinction permet de traiter différement les fichiers textes dont l'extension peut être .txt, .ini, .log, .xml, etc., et les fichiers binaires comme les images, vidéos, sons et autres...

Les flux sont également capables de faire transiter des informations provenant d'une entrée standard (System.in) telle que le clavier, ou allant vers une sortie standard (System.out) comme l'écran.

Ainsi, on distingue quatre familles de flux appelés également flots :

  • Les flots en lecture ou d'entrée,
  • Les flots en écriture ou de sortie,
  • Les flots binaires,
  • Les flots de caractères.

Les flots d'entrée et de sortie peuvent être utilisés pour n'importe quel périphérique, à l'image d'un écran, d'une imprimante, d'un fichier disque ou du réseau (sortie du programme) et d'un clavier, d'une souris, d'un ordinateur distant ou d'un fichier disque (entrée du programme).

Il est possible de combiner les flux ci-dessus, de cette façon :

  • Les flots binaires en lecture,
  • Les flots binaires en écriture,
  • Les flots de caractères en lecture,
  • Les flots de caractères en écriture.

Les flux sont unidirectionnels, et possèdent dont seulement une entrée et une sortie. Ils ne peuvent envoyer des informations que dans un seul et unique sens.

Les classes appropriées pour l'utilisation des flux se trouvent dans le paquetage java.io. Il en existe une kyrielle permettant d'accomplir des opérations de lecture et d'écriture adaptées à des besoins spécifiques.

On distingue quatre classes principales dont toutes les autres héritent des représentations et comportements propre à chaque famille.

  • java.io.InputStream (flot binaire en lecture),
  • java.io.OutputStream (flot binaire en écriture),
  • java.io.Reader (flot de caractères en lecture),
  • java.io.Writer (flot de caractères en écriture).
Héritage des classes de flux sur trois niveaux
InputStreamOutputStream
AudioInputStream
ByteArrayInputStream
FileInputStream
FilterInputStream
BufferedInputStream
CheckedInputStream
CipherInputStream
DataInputStream
DigestInputStream
InflaterInputStream
LineNumberInputStream
ProgressMonitorInputStream
PushbackInputStream
InputStream
ObjectInputStream
PipedInputStream
SequenceInputStream
StringBufferInputStream
ByteArrayOutputStream
FileOutputStream
FilterOutputStream
BufferedOutputStream
CheckedOutputStream
CipherOutputStream
DataOutputStream
DeflaterOutputStream
DigestOutputStream
PrintStream
ObjectOutputStream
OutputStream
PipedOutputStream
ReaderWriter
BufferedReader
LineNumberReader
CharArrayReader
FilterReader
PushbackReader
InputStreamReader
FileReader
PipedReader
StringReader
BufferedWriter
CharArrayWriter
FilterWriter
OutputStreamWriter
FileWriter
PipedWriter
PrintWriter
StringWriter
Sommaire