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 :

Ecraser une ligne par une autre dans un fichier binaire


Sujet :

Entrée/Sortie Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 46
    Points : 35
    Points
    35
    Par défaut Ecraser une ligne par une autre dans un fichier binaire
    Bonjour,
    Je voudrais ecraser les lignes commençant par la chaine strInit par la ligne strFin
    CODE:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public static void setLingne(String strInit,String strFin,String fic){
    		try{
    			RandomAccessFile fic=new RandomAccessFile(fic,"rw");
     
    			String ligne=fic.readLine();
    			while(ligne!=null){
    				if(ligne.startsWith(strInit)){
    					fic.writeBytes(strFin);
    					break;
    				}
    			}
    		}catch(Exception e){}
    	}
    Mais le probleme est que strFin n'ecrase pas strInit, mais elle est ajoutée aprés.
    Est ce que quelqu'un aurait une idée?
    Merci

  2. #2
    Membre expérimenté
    Avatar de muad'dib
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2003
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 013
    Points : 1 381
    Points
    1 381
    Par défaut
    De ce que je sais il n'est pas possible d'écrire dans un fichier à un endroit particulier. La solution est de charger le fichier en mémoire, le modifier en mémoire et le réécrire ensuite.
    De plus les blocs catch {} vides sont à PROSCRIRE RIGOUREUSEMENT. Si une exception est levée, tu n'en es pas informé. Il faut toujours afficher un message d'erreur ou effectuer une opération dans les catch (en général faire un printStackTrace() de l'exception)

  3. #3
    Membre éclairé Avatar de Lorantus
    Homme Profil pro
    Consultant développeur indépendant / Java/VB/C(++)/ObjectPal
    Inscrit en
    Août 2007
    Messages
    599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant développeur indépendant / Java/VB/C(++)/ObjectPal

    Informations forums :
    Inscription : Août 2007
    Messages : 599
    Points : 882
    Points
    882
    Par défaut
    Ton probléme est simple !

    Lorsque tu appliques
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String ligne=fic.readLine();
    tu lis une ligne de, disons 10 caractéres. Ton pointeur dans le flux d'entrée est avancé d'autant -je te passe le CR+LF/CR...
    ensuite tu écris:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fic.writeBytes(strFin);
    strFin s'écrit et écrase les caractères de la ligne suivante, car ton pointeur d'entrée est sur la ligne suivante.... (rappel toi que tu as avancé lors du readLine().

    Pour faire ta modification, je partirais sur:
    - un RandomAccessFile en mode "rw"
    - utilisation de la méthode seek(Long) pour jouer sur le pointeur du flux d'entrée (et de sortie puisque tu es en "rw")

    Attention : si strFin et de longueur différente de strInit, tu obtiens n'importe quoi car tu écrases les octets.

    Encore que, il est bon de faire un fichier temporaire au lieu de faire la méthode que tu as, copier les lignes 1 à 1 en contrôlant strInit et strFin... omme cela, tu risques rien par rapport à la longueur des tes chaînes...

Discussions similaires

  1. Réponses: 3
    Dernier message: 18/01/2015, 18h30
  2. [WD18] Metre une colonne d'une Table sur une ligne d'une autre Table
    Par Totophe2 dans le forum WinDev
    Réponses: 2
    Dernier message: 22/11/2013, 12h58
  3. Insérer une ligne entre deux autres dans un fichier
    Par c1malabar dans le forum Langage
    Réponses: 8
    Dernier message: 25/05/2011, 19h44
  4. [Batch] Remplacer une ligne par une autre dans un fichier txt
    Par tinwul dans le forum Scripts/Batch
    Réponses: 9
    Dernier message: 03/07/2009, 13h58
  5. Réponses: 9
    Dernier message: 22/05/2006, 12h21

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