Il existe deux façons d'accéder aux fichiers: de façon séquentielle, en considérant un fichier comme un flux, et de façon aléatoire (random
), ce qui permet de se déplacer en tout point du fichier dans n'importe quel ordre. En C, ces deux façons de procéder sont mélangées, mais en Java on distingue clairement le mode d'accès séquentiel qui s'appliques aux flux de données (streams
), et le mode aléatoire, principalement implanté à travers la classe RandomAccessFile
.
Ces notes sont inspirées d'une section du tutoriel java en ligne.
La classe RandomAccessFile
permet à la fois de lire et d'écrire dans des fichiers (elle implante les deux interfaces DataInput
et DataOutput
).
On peut créer un objet RandomAccessFile
à partir d'un chemin d'accès à un fichier sur le disque dur, ou bien à partir d'un objet File
. A la création, on doit spécifier, comme en C, le mode d'ouverture du fichier : lecture ou lecture+écriture. Notez qu'on ne peut pas utiliser l'écriture seule.
Pour lire le fichier exemple.txt avec un RandomAccesFile
:
new RandomAccessFile("exemple.txt", "r");
De la même façon, si on veut lire + écrire :
new RandomAccessFile("exemple.txt", "rw");
Ensuite, on peut utiliser les méthodes read
et write
des interfaces DataInput
et DataOutput
. Mais on peut aussi utiliser les méthodes suivantes, qui font appel à la notion de pointeur de fichier :
int skipBytes(int n)
: déplace le pointeur en avant de n octets.void seek(long n)
: positionne le pointeur juste avant le n-ième octet.long getFilePointer()
: retourne la position courante du pointeur.Un pointeur de fichier désigne donc un emplacement à l'intérieur du fichier, à partir duquel les actions de lecture et écriture sont effectuées. Les appels à read et write provoquent donc le déplacement automatique du pointeur à l'intérieur du fichier. La position 0 désigne le début du fichier.