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

Résolu
daviddubois Messages postés 92 Date d'inscription vendredi 19 mars 2004 Statut Membre Dernière intervention 6 janvier 2012 - 15 juil. 2007 à 18:32
daviddubois Messages postés 92 Date d'inscription vendredi 19 mars 2004 Statut Membre Dernière intervention 6 janvier 2012 - 15 juil. 2007 à 19:25
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

daviddubois Messages postés 92 Date d'inscription vendredi 19 mars 2004 Statut Membre Dernière intervention 6 janvier 2012
15 juil. 2007 à 18:52
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.

  
3
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
15 juil. 2007 à 19:11
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
0
daviddubois Messages postés 92 Date d'inscription vendredi 19 mars 2004 Statut Membre Dernière intervention 6 janvier 2012
15 juil. 2007 à 19:25
Salut,

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

Merci pour ta réponse.
0
Rejoignez-nous