Partage
  • Partager sur Facebook
  • Partager sur Twitter

Ajout de caractères à la fin de ma chaine

Lors de l'appel de replaceAll()

    20 décembre 2009 à 19:21:54

    Bonjour :)

    J'ai actuellement un programme qui lit un fichier. Je stocke son contenu dans une variable contenu, puis j'appelle replaceAll(). Les remplacements sont bien effectués, mais à la fin de ma chaine est ajoutée des caractères (ces caractères étaient les derniers de mon fichier). En gros, j'ai les 4 derniers caractères qui se sont copiés une seconde fois.

    Voici mon morceau de code :

    try {
        String contenu = "";
        
        // input et output sont des chemins de fichiers
        i = new FileInputStream(new File(input));
        o = new FileOutputStream(new File(output));
    
        byte[] buf = new byte[8];
        int n = 0;
        
        while((n = ihApp.read(buf)) >= 0)
            contenu += new String(buf);
        
        contenu = contenu.replaceAll("<app>", tNomApplication.getText());
        contenu = contenu.replaceAll("<apph>", tNomApplication.getText().replace(' ', '_').toUpperCase());
        
        o.write(contenu.getBytes());
        
        i.close();
        o.close();
    } catch (FileNotFoundException e1) {
        e1.printStackTrace();
    } catch (IOException e1) {
        e1.printStackTrace();
    }
    

    Merci pour toute réponse :)
    • Partager sur Facebook
    • Partager sur Twitter
      21 décembre 2009 à 22:40:27

      Personne ne peut m'aider s'il-vous-plait ?
      • Partager sur Facebook
      • Partager sur Twitter
        22 décembre 2009 à 21:50:12

        while((n = ihApp.read(buf)) >= 0)
        J'imagine qu'il faut comprendre while((n = i.read(buf)) >= 0)

        Le problème est très simple, ton buffer contient toujours les 4 dernier caractère lu, donc si tu lis moins de 4 caractère bin tu va avoir les anciens à la fin du buffer.
        Sinon ce que tu fais sert à rien sauf a désoptimiser.
        Donc tu devrais plutot utiliser, un BufferReader qui permet de lire le fichier ligne à ligne et renvois un String, ensuite tu modifier ce String, puis tu print ta ligne dans le fichier avec un PrintStream.
        Ca sera bien plus efficace que ta méthode, en effet utiliser un buffer peu rendre les choses plus rapide mais seulement si on l'utilise comme il faut hors là tu ne fait que charger tout le fichier en mémoire de la facon la plus inefficace qui soit. Il vaut donc mieux faire confiance aux class de java.io qui elles font les choses comme il faut, et de manière efficace. Et n'oublie pas la bible de java : http://java.sun.com/j2se/1.5.0/docs/api/
        tu verra comment utiliser les class que j'ai donné. (dans java.io)
        • Partager sur Facebook
        • Partager sur Twitter

        Ajout de caractères à la fin de ma chaine

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown