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 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 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.
InputStream | OutputStream |
---|---|
AudioInputStream ByteArrayInputStream FileInputStream FilterInputStream BufferedInputStream
InputStreamCheckedInputStream CipherInputStream DataInputStream DigestInputStream InflaterInputStream LineNumberInputStream ProgressMonitorInputStream PushbackInputStream ObjectInputStream PipedInputStream SequenceInputStream StringBufferInputStream | ByteArrayOutputStream FileOutputStream FilterOutputStream BufferedOutputStream
ObjectOutputStreamCheckedOutputStream CipherOutputStream DataOutputStream DeflaterOutputStream DigestOutputStream PrintStream OutputStream PipedOutputStream |
Reader | Writer |
---|---|
BufferedReader
LineNumberReader
CharArrayReaderFilterReader PushbackReader
InputStreamReader
FileReader
PipedReaderStringReader | BufferedWriter CharArrayWriter FilterWriter OutputStreamWriter FileWriter
PipedWriterPrintWriter StringWriter |