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 :

manipulation de fichier


Sujet :

Entrée/Sortie Java

Vue hybride

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

    Informations forums :
    Inscription : Novembre 2009
    Messages : 8
    Par défaut manipulation de fichier
    Bonsoir

    ALors mon problème est simple à comprendre :

    J'ai un fichier txt comprenant 200 entrées.
    Je voudrais (en java), copier des données précises de ce fichier (repérable par les chaine de caractères) ET les recopier dans un autre fichier.

    Je sais faire :
    -lecture ligne par ligne d'un fichier txt
    -copier un fichier entier dans un autre fichier

    MAIS comment, faire des "requètes" pour sélectionner des données précises?

    Je vous remercie de votre aide
    Rappel de la lecture ligne par ligne...
    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
    31
    32
    33
    34
    35
    36
    37
    38
     
    //lecture fichier texte ligne par ligne
     
     
     
    import java.io.*;
     
    public class ligneparligne
        {
        public static void main (String args[]) throws java.io.IOException
        {
        String filePath = "C:/Users/Iris/essaigeo/texte.txt";
        //char ch;
     
    try{
    // Création du flux bufférisé sur un FileReader, immédiatement suivi par un 
    // try/finally, ce qui permet de ne fermer le flux QUE s'il le reader
    // est correctement instancié (évite les NullPointerException)
    BufferedReader buff = new BufferedReader(new FileReader(filePath));
     
    try {
    String line;
    // Lecture du fichier ligne par ligne. Cette boucle se termine
    // quand la méthode retourne la valeur null.
    while ((line = buff.readLine()) != null) {
    System.out.println(line);
    //faites ici votre traitement
     
    } finally {
    // dans tous les cas, on ferme nos flux
    buff.close();
    }
    } catch (IOException ioe) {
    // erreur de fermeture des flux
    System.out.println("Erreur --" + ioe.toString());
    }
    }
    }

  2. #2
    Membre Expert Avatar de guigui5931
    Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2006
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 667
    Par défaut
    Qu'est ce que tu appelles faire des requetes? Récupérer des lignes qui ont un "format" précis?
    Si c'est ça tu pourrais faire par exemple dans le cas ou tu voudrais récupérer les lignes qui commence par la lettre a ceci :
    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
    31
    32
    33
    34
    35
     
    //lecture fichier texte ligne par ligne
    import java.io.*;
    public class ligneparligne
    {
    public static void main (String args[]) throws java.io.IOException
    {
    String filePath = "C:/Users/Iris/essaigeo/texte.txt";
    //char ch;
    ArrayList<String> listeFinale = new ArrayList<String>();
    try{
    // Création du flux bufférisé sur un FileReader, immédiatement suivi par un
    // try/finally, ce qui permet de ne fermer le flux QUE s'il le reader
    // est correctement instancié (évite les NullPointerException)
    BufferedReader buff = new BufferedReader(new FileReader(filePath));
     
    try {
    String line;
    // Lecture du fichier ligne par ligne. Cette boucle se termine
    // quand la méthode retourne la valeur null.
    while ((line = buff.readLine()) != null) {
    if (line.length() > 0 and line.charAt(0) == 'a'){ 
    listeFinale.add(line);
    }
     
    } finally {
    // dans tous les cas, on ferme nos flux
    buff.close();
    }
    } catch (IOException ioe) {
    // erreur de fermeture des flux
    System.out.println("Erreur --" + ioe.toString());
    }
    }
    }
    après le contenu de ton code dépendra de ta "requête" et de ce que tu veux faire des lignes qui correspondent à ta requête.

    C'est difficile dans dire plus sans plus de détails.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 8
    Par défaut
    merci pour ta réponse guigui,

    En fait mon fichier txt comporte des lignes comme ceci :
    ex :
    24/septembre/2009 17:40 194.250.133.3 47
    24/septembre/2009 17:40 195.200.217.2 45
    24/septembre/2009 17:40 193.25.195.8 33
    24/septembre/2009 17:40 193.34.131.45 45
    etc...

    et j'aimerai, par exemple, que mon programme popose à l'utilisateur : Quelle données souhaitez vous récupérer?:
    L'utilisateur taperait alors (ex) :
    24/septembre/2009 17:40 194.250.133.3

    et toute la ligne n°2 : 24/septembre/2009 17:40 195.200.217.2 45

    serait stokée automatiquement dans un autre fichier txt...
    Comment faire?
    Merci

  4. #4
    Membre expérimenté

    Inscrit en
    Octobre 2009
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 133
    Par défaut
    Tu veux récupérer la ligne que étant associe avec l'input de l'utilisateur ou la ligne suivante ?

    Car ici si l'utilisateur écrit : 24/septembre/2009 17:40 194.250.133.3
    tu devrais récupérer : 24/septembre/2009 17:40 194.250.133.3 47 et non pas la ligne suivante

    Malgré tout, pour ton problème, la méthode indexOf de la classe String devrait être ton ami.
    Tu fais quelque chose du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        String inputUser = INPUT DE L'UTILISATEUR;
    ....
        if (line.indexOf(inputUser) != - 1) {
            TON TRAITEMENT
        }
    Bien évidemment, si tu devais récupérer la ligne suivante (comme dans ton exemple), il te suffirait de lancer un nouveau readLine ou de gérer un flag pour la boucle suivante.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 8
    Par défaut
    Oui, pardon, c'est bien la même ligne que je veux récupérer... pas celle d'après...

    Mais IndexOf, c'est pour récupérer une partie d'une chaine de carctère... Je ne suis pas sûre que ça s'applique bien dans mon cas...

    Sinon, quand on a réussi à récupérer la ligne souhaitée, comment on peut la copier coller directement dans un autre fichier txt?

  6. #6
    Membre expérimenté

    Inscrit en
    Octobre 2009
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 133
    Par défaut
    En fait indexOf va te permettre de déterminer si une chaîne de caractère existe ou non dans ta ligne et a quelle position (tu as aussi contains comme méthode mais j'ai pas trop l'habitude). La position ici ne t'intéresses pas, seul t'intéresses de savoir si la chaîne existe dans la ligne ou non.

    Par conséquent, tu vas vérifier si ta ligne en cours (celle que tu as lu dans ton fichier) contient bien se qu'a écrit l'utilisateur et dans ce cas, tu écris la ligne dans l'autre fichier (la ligne n'est pas modifiée lorsque tu utilises indexOf).
    Je n'ai pas vérifié mais je suis quasi sur que l'explication de l'écriture dans un fichier est dans la FAQ Java, tu peux regarder la pour écrire dans un fichier au fur et a mesure.

    Par contre la méthode indexOf va verifier les caractères de manière exacte par rapport a l'input utilisateur (tu n'écris rien en cas d'inversion de caractères par exemple)

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

Discussions similaires

  1. Manipulation de fichier (copier, supprimer, déplacer)
    Par Guigui_ dans le forum Général Python
    Réponses: 1
    Dernier message: 21/10/2004, 10h26
  2. Manipulation des fichiers
    Par monsau dans le forum Langage
    Réponses: 7
    Dernier message: 21/09/2004, 17h45
  3. [LG]Manipulation de fichiers
    Par yffick dans le forum Langage
    Réponses: 29
    Dernier message: 10/01/2004, 15h04
  4. Manipulation de fichiers - gestion d'extensions
    Par ulukai dans le forum Linux
    Réponses: 13
    Dernier message: 02/07/2003, 15h28
  5. Réponses: 2
    Dernier message: 18/01/2003, 17h06

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