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 :

Modifier un fichier binaire type RandomAccessFile


Sujet :

Entrée/Sortie Java

  1. #1
    Membre du Club Avatar de lemok
    Inscrit en
    Mai 2007
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 83
    Points : 52
    Points
    52
    Par défaut Modifier un fichier binaire type RandomAccessFile
    Bonjour,

    J'ai un fichier binaire qui contient des enregistrements UTF ,mais je ne trouve pas comment faire pour supprimer une donnée dans ce fichier
    Je remplie mon fichier de cette manière:
    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
     
            try {
                RandomAccessFile monFichier = new RandomAccessFile("monfichier.dat", "rw");
     
                monFichier.writeUTF("Saturne");
                monFichier.writeUTF("192.168.50.12");
                monFichier.writeUTF("Jupiter");
                monFichier.writeUTF("192.168.50.21");
                monFichier.writeUTF("Mars");
                monFichier.writeUTF("192.168.80.22");
                monFichier.writeUTF("FC1");
                monFichier.writeUTF("192.168.80.45");
     
                monFichier.close();
     
            } catch (Exception e) {
                e.printStackTrace();
            }
    Mais si je veux supprimer une donnée (par exemple : Mars 192.168.80.22 ) je ne trouve pas comment m'y faire.
    Si quelqu'un a une idée

    Merci d'avance.

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 104
    Points : 140
    Points
    140
    Par défaut
    Bonjour,
    Si le fichier est petit, une solution simple serait de charger tout le fichier dans une liste, d'éliminer l'entrée non désirée de la liste puis de réécrire tout le fichier à partir de la liste.
    Sinon, une autre solution serait de lire le fichier fichier jusqu'après l'entrée à éliminer, puis de réécrire toute la fin de fichier en la décalant de la taille de l'entrée à éliminer.
    Mais, si j'avais le choix, j'adopterais un autre format de fichier.

  3. #3
    Membre expérimenté
    Avatar de yotta
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2006
    Messages
    1 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 088
    Points : 1 540
    Points
    1 540
    Par défaut
    En fait, il n'y a aucun besoin de charger l'intégralité du fichier en mémoire pour le modifier. Quoi qu'il en soit, il n'existe pas de méthode miracle pour modifier physiquement le contenu d'un fichier. Supprimer ou ajouter du contenu à un fichier se traduit systématiquement par la création d'un fichier temporaire qui une fois terminé remplacera l'originale. En clair, pour supprimer des données dans votre fichier, il vous suffit de l'ouvrir pour récupérer son flux d'entrée et dans le même temps, créer un fichier temporaire et récupérer son flux de sortie. Une fois vos flux récupérés, il ne reste plus qu'à écrire dans le flux de sortie ce qui est lu depuis le flux d'entrée sous condition.
    Par exemple :
    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
                RandomAccessFile monFichier, monFichierTmp;
                try {
                    monFichier = new RandomAccessFile("monfichier.dat", "r");
                    monFichierTmp = new RandomAccessFile("monfichier.dat.tmp", "rw");
                    try {
                        String valTmp;
                        while (true) {
                            valTmp = monFichier.readUTF();
                            System.out.println(valTmp);
                            if (!valTmp.equals("192.168.50.12")) monFichierTmp.writeUTF(valTmp);
                            }
                        }
                    catch (EOFException eof) {
                        monFichier.close();
                        monFichierTmp.close();
    // Il ne reste plus qu'à supprimer monFichier.dat, et à le remplacer par monFichier.dat.tmp en déplaçant/renommant ce dernier monFichier.dat.
                        }
                    }
                catch (IOException fx) {
                    fx.printStackTrace();
                    }

  4. #4
    Membre du Club Avatar de lemok
    Inscrit en
    Mai 2007
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 83
    Points : 52
    Points
    52
    Par défaut
    Merci beaucoup pour votre aide.

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

Discussions similaires

  1. Nosql - Fichiers Binaires - type de base
    Par jcaspar dans le forum NoSQL
    Réponses: 1
    Dernier message: 16/06/2014, 09h00
  2. Modifier octets fichier binaire
    Par ALGERINO83 dans le forum VB.NET
    Réponses: 4
    Dernier message: 25/04/2009, 19h51
  3. Reprise de donnée d'un fichier binaire type en C
    Par vedge2000 dans le forum Langage
    Réponses: 5
    Dernier message: 15/12/2008, 08h36
  4. Modifier un fichier binaire
    Par medanis dans le forum C
    Réponses: 2
    Dernier message: 30/04/2008, 17h53
  5. Modifier un fichier binaire
    Par billybob2 dans le forum C#
    Réponses: 5
    Dernier message: 11/03/2008, 10h37

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