IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Entrée/Sortie Java Discussion :

Problème avec RandomAccessFile


Sujet :

Entrée/Sortie Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 42
    Par défaut Problème avec RandomAccessFile
    Bonjour tout le monde,

    Je rencontre le problème suivant dans un projet :

    je dois mettre en forme un fichier txt "aléatoirement". En fait j'ai des données dans la DB et d'autres provenant d'un fichier reçu et il faut les combiner pour n'avoir qu'un seul fichier. Le problème est que cet ordre doit pouvoir changer dynamiquement (donc stockage des params dans la DB).
    Au vu du problème je me suis orienté vers RandomAccessFile mais ça me fait un peu n'importe quoi

    Le code est du type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    //On parcourt chaque ligne du fichier qu'on reçoit
    while ((nextLine = reader.readLine()) != null) {
                try {
     
                    //On écrit un header en récupérant des infos présentes dans la db
                    rac.writeBytes("TEST");
                    rac.writeBytes("-");
                    rac.writeBytes("16/02/1985");
                    rac.writeBytes("-");
                    rac.writeBytes(String.valueOf(1));
                    rac.writeBytes("-");
                    rac.writeBytes("01");
                    rac.writeBytes("032321");
                    rac.writeBytes("\n");       
     
                    //Dans ce header on a le nb d'enregistrements attendus, on peut donc parcourir les x lignes normalement présentes
                   while (nb_lignes > 0) {
                     //On écrit toutes les infos souhaités aux positions indiquées
                     rac.seek(position_i);
                     rac.write(valeur_i);
                    }         
     
                } catch (IOException ex) {
                    ex.printStackTrace();
                }            
            }
    Après divers test jme suis rendu compte que c'est au niveau du rac.seek(x) que ça merdait : j'ai l'impression qu'il prend pas en compte qu'il est sur une nouvelle ligne et donc par exemple si jmet seek(20), il va chercher à 20 du début de la 1ère ligne et foire tout le fichier alors que si je mets pas le seek le fichier s'enregistre correctement mais bien sur dans l'ordre du code et plus dans celui des params, perdant tout l'intêret de ce système.

    Savez-vous comment je pourrais marcher de la bonne manière ce seek? Ou alors c'est pas possible et jdois chercher dans une autre voie (si oui laquelle) ?

    Merci d'avance

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 252
    Par défaut
    RandomAccessFile est une classe qui te permet d'accéder à n'importe quelle portion du fichier ; cela ne signifie nullement que des données aléatoires seront mystérieusement triées.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 42
    Par défaut
    Oui mais il n'y a pas méthodes pour lui faire comprendre qu'on est sur une nouvelle ligne? Dans le style du readline pour le reader.

    Je veux positionner les éléments par rapport à la ligne en fait et pas par rapport au fichier lui même (je sais pas si c'est très clair tout ça).

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 252
    Par défaut
    La seule manière que je vois est d'insérer une ligne toi-même, de vérifier l'offset de ce caractère \n et d'ajouter ce que tu souhaites en fonction de cet offset.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 42
    Par défaut
    Merci pour l'aide.
    J'ai finalement fait plus simple : stocker les positions dans une TreeMap et les écrire lors de l'itération avec un writer basique. Simple et efficace

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. VC++ Direct3D8, problème avec LPD3DXFONT et LPD3DTEXTURE8
    Par Magus (Dave) dans le forum DirectX
    Réponses: 3
    Dernier message: 03/08/2002, 11h10
  2. Problème avec [b]struct[/b]
    Par Bouziane Abderraouf dans le forum CORBA
    Réponses: 2
    Dernier message: 17/07/2002, 10h25
  3. Problème avec le type 'Corba::Any_out'
    Par Steven dans le forum CORBA
    Réponses: 2
    Dernier message: 14/07/2002, 18h48
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo