précédent | suivant | table des matières

RandomAccessFile

Sommaire
  1. Constructeurs
  2. Méthodes
  3. Exemples
    1. Exemple 1
    2. Exemple 2

Permet de faire des lectures ou écritures  à une position aléatoire dans un fichier. Cette classe peut être utilisée pour des fichiers disque, mais pas pour des flux de données provenant du réseau. Le flux peut être lu ou écrit de la même façon que les flux séquentiels, avec levée d'exception EOFException en fin de flux. Le flux peut également être lu ou écrit en accès direct en positionnant la "tête de lecture/écriture"  par la méthode seek. La classe RandomAccessFile implémente les interfaces DataInput, DataOutput et Closeable.

1 Les constructeurs :

RandomAccessFile(File f, String m)
Crée un nouveau flux à accès direct associé au File f et ouvert dans le mode m.
RandomAccessFile(String n, String m) 
Crée un nouveau flux à accès direct associé au fichier de nom n et ouvert dans le mode m.

Le mode d'ouverture d'un flux à accès direct peut être :

2 Les méthodes :

long getFilePointer()
Retourne la valeur du pointeur.
voidseek(long pos)
Positionne le pointeur.
longlength()
Retourne la longueur du fichier.
voidsetLength(long nl)
Change la longueur du fichier en nl.

voidclose()
Fermeture du fichier
FileDescriptor getFD()
Retourne un descripteur du fichier
intread() 
Lit un octet dans le fichier
int read(byte[] b)
Lit jusqu’à taille de b octets dans le fichier et les range dans b
int read(byte[] b, int d, int l)
Lit jusqu’à l octets dans le fichier et les range dans b à partir de d.
boolean readBoolean()
Lit un booléen.
byte readByte()
Lit un octet.
char readChar()
Lit un caractère.
double readDouble()
Lit un flottant double.
float readFloat()
Lit un flottant float.
int readInt() 
Lit un entier int.
String readLine()
Lit une suite d'octets jusq'à une marque de fin de ligne, ou la fin fu flux, et retourne ces octets sous forme de chaîne de caracères.
long readLong() 
 Lit un entier long.
short readShort()
 Lit un entier short.
int readUnsignedByte()
Lit un octet non signé, et le retourne.
int readUnsignedShort()
Lit deux octets comme étant la représentation d'un short non signé, et le retourne.
String readUTF()
Lit une chaîne de caractères encodée UTF-8.
int skipBytes(int n)
Essaie d'avancer de n octets, et retourne le nombre réel d'octets sautés.
void write(byte[] b)
Ecrit le tableau d'octetsb.
void write(byte[] b,  int d, int l) 
Ecrit l octets du  tableau d'octets b, à patir de d.
void write(int b)
Ecrit l'octet de droite contenu dans b.
void writeBoolean(boolean v)
Ecrit le booléen v.
void writeByte(int v)
Ecrit l'octet v.
void writeChar(int v)
Ecrit le caractère contenu dans v.
void writeDouble(double v)
Ecrit le flottant v.
void writeFloat(float v).
 Ecrit le flottant v.
void writeInt(int v)
 Ecrit l'entier v.
void writeLong(long v)
Ecrit l'entier v.
void writeShort(int v)
Ecrit l'entier v.

void writeBytes(String s)
Ecrit la chaîne de caractères sous la forme d'une suite d'octets. Seul l'octet de droite de chauqe caractères est écrit.
voidwriteChars(String s)
Ecrit la chaîne de caractères.
void writeUTF(String str)
Ecrit la chaîne de caractères en utilisant l'encodage UTF-8.

3 Exemple : 


3.1 Exemple : 

Ecriture dans un fichier des lettres de ‘a’ à ‘z’, Puis remplacement d'une des lettres de façon aléatoire par "?".

try{
   // écriture
   RandomAccessFile out = new RandomAccessFile ("accesDirect","rw");
   for(char i = 'z'; i>='a'; --i){
      out.seek(i-'a');
      out.write(i);
   }
   out.seek((long)(Math.random()*out.length()));
   out.write('?');
   out.close();
}catch(IOException ex){ ... }

3.2 Exemple : 

Génération d'un fichiers d'entiers aléatoires et tri de ce fichier.

try {
   RandomAccessFile raf = new RandomAccessFile("x", "rw");
   // génération
   for (int i = 0; i< 100; ++i)
      raf.writeInt((int)(Math.random()*1000));
   
   raf.close();
   // tri 
   raf = new RandomAccessFile("x", "rw");
   for (int i = 0; i < 99; ++i){
      int iMin = i; 
      raf.seek(iMin*4); 
      int min = raf.readInt();
      for(int j = i+1; j<100; ++j){
         raf.seek(j*4); int courant = raf.readInt();
         if(courant < min) {
            iMin = j;
            raf.seek(iMin*4);  min = raf.readInt();
         }
      }
      raf.seek(i*4);
      int a = raf.readInt();
      raf.seek(iMin*4); raf.writeInt(a);
      raf.seek(i*4);    raf.writeInt(min);
   }
   raf.close();
   // affichage
   raf = new RandomAccessFile("x", "r");
   for (int i = 0; i< 100; ++i)
      System.out.print("  "+raf.readInt());
   
   System.out.println();
   raf.close();
} catch (FileNotFoundException e) { ... }
  catch (IOException e) { ... }

haut de la page