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 :

Suppression ligne fichier texte


Sujet :

Entrée/Sortie Java

  1. #1
    Membre du Club
    Suppression ligne fichier texte
    Je recherche une fonction qui permet de supprimer une ligne dans un fichier texte

  2. #2
    Membre expert
    Salut,

    Ca n'existe pas autant que je sache : il faut que tu le programmes toi même.

    A+
    K

  3. #3
    Expert éminent sénior
    Comme l'a dit Kilvaiden, ca n'existe pas ainsi, mais c'est très facile à faire. Il te suffit de parcourir tout le fichier texte et de réécrire toutes les lignes dans un autre fichier et si tu rencontres un ligne que tu veut supprimmer, tu ne l'écris pas dans le deuxième fichier. A la fin de l'opération, soit tu renommes le deuxième fichier par le nom premier, soit tu gardes ainsi.

    Si tu ne veut pas passer par un deuxième fichier, tu dois tout stocker dans ton programme sauf les lignes à supprimmer et ensuite tout réécrire dans le fichier de départ.

  4. #4
    Membre du Club
    merci bien de vos repondre,mais comment on recrit sur le meme fichier ceux que l on veut,il ne rajoutera pas a la fin du fichier...

  5. #5
    Membre éclairé
    Tu peux essayer de la remplacer...
    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
    28
    29
    30
     
    public static boolean readReplace(String fileName, String oldPattern,
                String replPattern, int lineNumber) {
            String line;
            StringBuffer sb = new StringBuffer();
            int nbLinesRead = 0;
            try {
                FileInputStream fis = new FileInputStream(fileName);
                BufferedReader reader = new BufferedReader(new InputStreamReader(
                        fis));
                while ((line = reader.readLine()) != null) {
                    nbLinesRead++;
                    line = line.toLowerCase();
     
                    if (nbLinesRead == lineNumber) {
                        line = line.replaceFirst(oldPattern.toLowerCase(),
                                replPattern);
                    }
                    sb.append(line + "\n");
                }
                reader.close();
                BufferedWriter out = new BufferedWriter(new FileWriter(fileName));
                out.write(sb.toString());
                out.close();
     
            } catch (Exception e) {
                return false;
            }
            return true;
        }
    "Il y a 3 personnes en ce monde sur qui tu peux compter : moi, le pape et le cavalier solitaire ! "
    Penser à svp

  6. #6
    Membre du Club
    merci,ca marche...

  7. #7
    Membre actif
    Bonsoir
    j'aimerais utiliser le code que vous venez de donner mais y'a un petit détail que je ne comprend pas: à quoi servent "String oldPattern" et "String replPattern"?
    Merci.

  8. #8
    Modérateur

    En fait, ce code sert à traiter une ligne précise du fichier, en remplaçant une partie de cette ligne, oldPattern, par autre chose, replPattern.

    Si on veut supprimer la ligne, il ne faut pas la traiter, mais simplement ne pas la mettre dans le fichier réécrit.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Membre actif
    Ah d'accord,je comprends le principe.Mais qu'est ce que vous entendez par "en remplaçant une partie de cette ligne, par autre chose".Par quoi va t'on remplacer le ligne qu'on ne veut pas écrire?
    Et puis j'imagine que "filename" prend en paramètre le nom du fichier,"lineNumber" le numéro de la ligne qu'on veut remplacer,mais je sais toujours pas ce que je dois donner en paramètre pour oldPattern et replPattern.
    Merci encore

  10. #10
    Membre actif
    N'y aurait il pas une âme charitable pour me répondre?

  11. #11
    Expert éminent sénior
    Citation Envoyé par momjunior Voir le message
    N'y aurait il pas une âme charitable pour me répondre?
    Tu pourrais faire un effort. Thelvin t'a donné la réponse.

    Il suffit de lire le fichier intégralement et le réécrire sans la ligne en question :

    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
    public static boolean deleteLine(String fileName, int lineNumber) {
            try {
                BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(fileName)));
     
                StringBuffer sb = new StringBuffer(); 
                String line;    
                int nbLinesRead = 0;       
                while ((line = reader.readLine()) != null) {
                    if (nbLinesRead != lineNumber) {
                        sb.append(line + "\n");
                    }
                    nbLinesRead++;
                }
                reader.close();
                BufferedWriter out = new BufferedWriter(new FileWriter(fileName));
                out.write(sb.toString());
                out.close();
     
            } catch (Exception e) {
                return false;
            }
            return true;
        }


    Après, faudra juste revoir la gestion des exceptions.

  12. #12
    Membre actif
    Oui j'avais compris,mais je voulais savoir ce que je dois donner en paramètre concernant "String oldPattern" et "String replPattern".En plus dans la dernière méthode que vous venez de me donner,vous les avez supprimer,donc on dirait qu'ils servaient pas à grand chose.

  13. #13
    Expert éminent sénior
    Citation Envoyé par momjunior Voir le message
    Oui j'avais compris,mais je voulais savoir ce que je dois donner en paramètre concernant "String oldPattern" et "String replPattern".En plus dans la dernière méthode que vous venez de me donner,vous les avez supprimer,donc on dirait qu'ils servaient pas à grand chose.
    C'est une autre façon de faire permettant de remplacer une partie d'une ligne par quelque chose d'autre.

  14. #14
    Membre actif
    Ah ok,merci infiniment?et ça marche.

###raw>template_hook.ano_emploi###