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 :

Question sur lecture d'un fichier text en Java


Sujet :

Entrée/Sortie Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2007
    Messages : 38
    Points : 28
    Points
    28
    Par défaut Question sur lecture d'un fichier text en Java
    Bonjour,

    Je doit lire un fichier texte en Java et le comparer avec un fichier XML.
    Mais pour commencé j'ai quelque difficulté a lire le fichier texte.

    Mon fichier texte resemble a ceci:

    Roger Michaud, 1452369874, 321, 2
    Albert Richard, 5986541235, 321, 6
    Yvette Gagnon, 5987596230, 1, 12
    Je doit pouvoir recuperer les données de l'avant-derniere virgule ( 321 et 1 ) et je doit pouvoir recuperer les derniere donnees ( 2 , 6 et 12 ). Je doit pouvoir les compare ou soustraire a un fichier XML qui contient deux attribut distinct.

    Voici ce que j'ai en java pour l'instant pour lire mon fichier texte:

    public static void main(String[] args) throws Exception {

    InputStream ips=new FileInputStream("achats.txt");
    InputStreamReader ipsr=new InputStreamReader(ips);
    BufferedReader br=new BufferedReader(ipsr);
    String line;
    String texte = "";
    while ((line=br.readLine())!=null){
    texte+=line+"\n";
    }
    br.close();
    System.out.println(texte);
    }
    Ce code lis tout mon fichier en entier et l'affiche, moi je voudrais pouvoir afficher les deux dernier information de mon fichier texte, dans des variables.

    Merci de votre aide.

  2. #2
    Expert confirmé
    Avatar de krachik
    Inscrit en
    Décembre 2004
    Messages
    1 964
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 964
    Points : 4 015
    Points
    4 015
    Par défaut
    Bonjour
    pour faire simple tu recupere chaque ligne par exemple (ligne) et tu fait un split sur la ligne par exemple (ligne.split(","))que tu met dans un tableau de String et apres t'a juste qu'a prendre les deux derniers chaine de ton tableau et le tour est joué
    @+

  3. #3
    Membre chevronné
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Points : 1 958
    Points
    1 958
    Par défaut
    Un conseil : pour concatener les chaines, utilise StringBuffer ou StringBuilder(depuis JDK1.5) plutôt que l'opérateur += sur String.

  4. #4
    Membre averti Avatar de Amine_sas
    Profil pro
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    245
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 245
    Points : 307
    Points
    307
    Par défaut
    Salut,

    Tu peux également utiliser la classe StringTokenizer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    while ((line=br.readLine())!=null){
    texte+=line+"\n";
    StringTokenizer tokenizer = new StringTokenizer(text, ",");
    /* pour la chaine Roger Michaud, 1452369874, 321, 2 l'objet tokenizer contiendra 4 tokens. */
     
    String s1 = tokenizer.nextToken(); // Roger Michaud
    String s2 = tokenizer.nextToken(); // 1452369874
    String s3 = tokenizer.nextToken(); // 321
    String s4 = tokenizer.nextToken(); // 2
    }
    pour atteindre directement le 4eme token par exemple tu peux utiliser la méthode booléenne hasMoreTokens() avec un compteur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    int i = 1;
    while (tokenizer.hasMoreTokens() && i < 4)
    {
       tokenizer.nextToken();
       i++;
    }
     
    String str4 = tokenizer.nextToken();
    A+

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2007
    Messages : 38
    Points : 28
    Points
    28
    Par défaut
    Wow! merci beaucoup de l'aide.

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2007
    Messages : 38
    Points : 28
    Points
    28
    Par défaut
    Quelle IMPORT que je doit inscrire au début du fichier pour utilisé StringTokenizer?

  7. #7
    Membre chevronné
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Points : 1 958
    Points
    1 958
    Par défaut
    Savoir utiliser la javadoc est indispensable lorsque l'on développe en java. Je te laisse chercher un peu.
    Un indice : "index" permet d'afficher toutes les classes triées par nom...

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2007
    Messages : 38
    Points : 28
    Points
    28
    Par défaut
    J'utilise ce code:

    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
        public static void main(String[] args) throws Exception {
     
    		InputStream ips = new FileInputStream("achats.txt");
    		InputStreamReader ipsr = new InputStreamReader(ips);
    		BufferedReader br = new BufferedReader(ipsr);
    		String line;
    		String texte = "";
    		while ((line=br.readLine())!=null){
    			texte+=line+"\n";
     
    			StringTokenizer tokenizer = new StringTokenizer(texte, ",");
    			/* pour la chaine Roger Michaud, 1452369874, 321, 2 l'objet tokenizer contiendra 4 tokens. */
     
    			String s1 = tokenizer.nextToken(); // Roger Michaud
    			String s2 = tokenizer.nextToken(); // 1452369874
    			String s3 = tokenizer.nextToken(); // 321
    			String s4 = tokenizer.nextToken(); // 2
     
    		}
    		br.close();
    		System.out.println(texte);
     
        }
     
    }
    Mais mon tokenizer ne change pas de ligne, il fait la lecture seulement de la premiere ligne, mais mon fichier est lu en entier.

    Comment dire a tokenizer de lire la seconde ligne?

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2007
    Messages : 38
    Points : 28
    Points
    28
    Par défaut
    C'est bon j'ai trouvé mon erreur!

  10. #10
    Membre habitué Avatar de manube
    Homme Profil pro
    Responsable sécurité
    Inscrit en
    Mai 2004
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Responsable sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 180
    Points : 178
    Points
    178
    Par défaut
    Sinon, il y a des outils qui existent déjà :
    http://sourceforge.net/projects/javacsv/

    ++

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2007
    Messages : 38
    Points : 28
    Points
    28
    Par défaut
    Nouveau problème. Voici mon code:

    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
    		String line;
    		String texte = "";
    		while ((line=br.readLine())!=null){
    			texte+=line+"\n";
     
    			StringTokenizer tokenizer = new StringTokenizer(line, ",");
     
    			s1 = tokenizer.nextToken();
    			s2 = tokenizer.nextToken();
    			s3 = tokenizer.nextToken();
    			s4 = tokenizer.nextToken();
     
    			if (s3.equals("1")){
    				System.out.println("S3: "+s3);
    			}
     
    		}
    Je veux vérifié si s3 est egale a 1. mais ca ne fonctionne pas. Pourtant je croit bien utilisé la bonne méthode ?

  12. #12
    Membre averti Avatar de Amine_sas
    Profil pro
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    245
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 245
    Points : 307
    Points
    307
    Par défaut
    Citation Envoyé par ovcrash Voir le message
    Nouveau problème. Voici mon code:
    Je veux vérifié si s3 est egale a 1. mais ca ne fonctionne pas. Pourtant je croit bien utilisé la bonne méthode ?
    Oui parce que elle n'egale pas à "1" mais à " 1" (avec un espace).
    Tu peux utiliser la StringTokenizer pour scinder la ligne en fonction de "," et de " " (ou n'importe quel autre caractere)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    StringTokenizer tokenizer = new StringTokenizer(line, " ,");
    mais cela te posera un probleme (Tu dois tester le code et le trouver).

    Je te laisse le soin de trouver la solution.
    indice: inspectes les méthodes de la classe String.

    @+

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2007
    Messages : 38
    Points : 28
    Points
    28
    Par défaut
    Merci a tous, j'ai trouvé la solution et le tout fonctionne!!

  14. #14
    Débutant Avatar de miron
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    479
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 479
    Points : 291
    Points
    291
    Par défaut
    Citation Envoyé par ovcrash Voir le message
    Merci a tous, j'ai trouvé la solution et le tout fonctionne!!
    ?

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

Discussions similaires

  1. Double question sur lecture Fichier txt
    Par loribac dans le forum Langage
    Réponses: 6
    Dernier message: 29/05/2013, 14h13
  2. lecture d'un fichier texte avec java.
    Par thy-sins dans le forum Général Java
    Réponses: 1
    Dernier message: 03/02/2012, 07h12
  3. Réponses: 6
    Dernier message: 23/02/2006, 12h09
  4. Lecture d'un fichier Texte
    Par jcharles dans le forum Bases de données
    Réponses: 8
    Dernier message: 27/10/2004, 14h58
  5. Stockage de données & lecture d'un fichier texte
    Par petitours dans le forum C++Builder
    Réponses: 6
    Dernier message: 13/03/2004, 14h05

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