Je n'arrive pas à ajouter un nombre dans un fichier RandomAccessFile

Résolu
Signaler
Messages postés
93
Date d'inscription
vendredi 19 mars 2004
Statut
Membre
Dernière intervention
6 janvier 2012
-
Messages postés
93
Date d'inscription
vendredi 19 mars 2004
Statut
Membre
Dernière intervention
6 janvier 2012
-
Bonjour tout le monde,

J'ai un petit problème avec un RandomAccessFile et je pense pourtant faire ce que je dois faire.

Le but de mon exercice est de remplir un fichier raf avec 20 chiffres aléatoires entre 1 et 10.

Pour cela pas de problème :

 for (int i=0; i<20; i++)
  {
   
   nombres = (int) (Math.random()*10)+1;
   raf.writeInt(nombres);
   System.out.println(nombres);
  }

j'obtiens par exemple ceci :

la taille du fichier a sa creation est de 0
10
8
4
9
4
10
6
9
8
4
6
5
1
4
1
2
4
5
9
4
la taille du fichier vaut maintenant 80

Je demande ensuite de saisir un nombre entier (entre 1 et 10)

Pour cela, pas de problème non plus :

System.out.println("Veuillez saisir un nombre entier entre 1 et 10, 0 pour sortir");
  
  nombres = Clavier.lireInt();

Ensuite, j'aimerais ajouter le chiffre entré par le visiteur à la suite du fichier raf mais c'est là que ça coince :

//je vais au premier enregistrement (je ne sais pas si c'est nécessaire)
raf.seek(0);
// je vais à la fin du fichier raf
  raf.seek(tailleFichier);
//j'écris un entier à l'emplacement où je me trouve, la valeur entrée est la valeur de nombres
  raf.writeInt(nombres);
  
Mais quand j'affiche le contenu du raf, le nombre n'est pas pris en compte et le nombre d'enregistrement est toujours le même (donc pas un de plus)

Sauriez-vous me dire d'où vient l'erreur ?

Je vous laisse mon code en entier : (merci d'avance pour votre aide)

import java.io.*;
public class Jean02
{
 public static void main (String [] args) throws IOException
 {
  File f = new File("c:\\jean.dat");
  f.delete();
  
  RandomAccessFile raf = new RandomAccessFile(f,"rw");
  
  long tailleFichier = raf.length();
  System.out.println("la taille du fichier a sa creation est de " + tailleFichier);
  
  int recSize = 4;
  int nombres;
  long nbRec = tailleFichier /recSize;
  raf.seek(0);
  for (int i=0; i<20; i++)
  {
   
   nombres = (int) (Math.random()*10)+1;
   raf.writeInt(nombres);
   System.out.println(nombres);
  }
  
  tailleFichier = raf.length();
  System.out.println("la taille du fichier vaut maintenant " + tailleFichier);
  
  System.out.println("Veuillez saisir un nombre entier entre 1 et 10, 0 pour sortir");
  
  nombres = Clavier.lireInt();
  
  System.out.println("nombres a ajouter : " + nombres);
  
  raf.seek(0);
  raf.seek(tailleFichier);
  raf.writeInt(nombres);
  
  raf.seek(tailleFichier-recSize);
  System.out.println("le dernier element du raf est de " + raf.readInt());
  
  
  raf.seek(0);
  nbRec = tailleFichier / recSize;
  
  System.out.println("nbRec vaut " + nbRec);
  
  System.out.println("La liste actualisee : ");
  
  for (int i=0; i<nbRec;i++)
  {
   nombres = raf.readInt();
   
   System.out.println(nombres);   
  }
  
  
  
  
  
 }
}

3 réponses

Messages postés
93
Date d'inscription
vendredi 19 mars 2004
Statut
Membre
Dernière intervention
6 janvier 2012

Rebonjour,

Je me permets de répondre à mon propre post.

J'ai trouvé.

L'erreur est ici :

raf.seek(0);
  raf.seek(tailleFichier);
  System.out.println("position actuelle " + raf.getFilePointer());
  raf.writeInt(nombres);
  tailleFichier = raf.length();
  System.out.println("la taille du fichier apres insertion de " + nombres + " : " + tailleFichier);
  
  raf.seek(tailleFichier-recSize);
  System.out.println("le dernier element du raf est de " + raf.readInt());

Le problème c'est que je n'avais pas mise à jour la variable tailleFichier.

Question importante :

N'y a-t'il pas moyen que cette variable se mette à jour automatiquement ?

Sommes-nous toujours obligé de mettre cette variable à jour manuellement ?

Merci d'avance pour votre aide qui m'est si précieuse.

  
Messages postés
5366
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
6 décembre 2021
111
Salut,

bah vi comment veux-tu que la mise à jour se fasse automatiquement ?

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

OoWORAoO
Messages postés
93
Date d'inscription
vendredi 19 mars 2004
Statut
Membre
Dernière intervention
6 janvier 2012

Salut,

Je ne sais pas, je posais juste la question, donc pas possible.

Merci pour ta réponse.