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

Java Discussion :

Lecture d'un fichier ligne par ligne en Java


Sujet :

Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 298
    Points : 85
    Points
    85
    Par défaut Lecture d'un fichier ligne par ligne en Java
    En terme de perf pour un tres grand fichier texte c'est quoi la meillure façon/API en java pour le faire,

    j'ai vu des sites parler de Scanner :

    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
    Scanner scanner=new Scanner(new File(dataFileName));
     
     
    		while (scanner.hasNextLine()) {
     
    		    String line = scanner.nextLine();
    		    ContractDunningData currentContract = new ContractDunningData();
     
    		    System.out.println(line);
     
    			//TODO 25/06 => Here each data from line & put in right property of "ContractDunningData"
     
     
    		    contractDataList.add(currentContract);
     
    		}
     
    		scanner.close();

    Merci

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 298
    Points : 85
    Points
    85
    Par défaut Scanner par ligne et pour le fichier ?
    Pour résumer j'ai 2 questions :

    - en terme de perf le Scanner est conseillé ? pour des grands fichiers ?

    - J'ai besoin de la classe Scanner pour lire ligne par ligne mais aussi je veux lire les différents champs d'une ligne délimités par un séparateur, j'ai trouvé un ex de 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
    Reader reader = null;
    // initialisation du reader ...
     
    Scanner scanner=new Scanner(reader);
     
    // L'expression régulière qui délimite les champs
    scanner.useDelimiter(Pattern.compile("[\t\n]"));
     
    // On boucle sur chaque champ detecté
    int champ;
    while (scanner.hasNext()) {
        // Si le champ n'est pas un entier, une exception de type InputMismatchException sera levée
        champ = scanner.nextInt();
     
        //Utilisation du champ...
    }
    sachant que dans mon code j'utilise déjà un scanner pour lire mon fichier ligne par ligne :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Scanner scanner=new Scanner(new File(dataFileName));
     
     
    		int countFileLines = 0 ;
     
    		while (scanner.hasNextLine()) {
     
    }
     
    		scanner.close();
    est ce possible d'utiliser le meme scanner pour faire les 2 sinon comment faire ?


    Merci

  3. #3
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    si tu n'a besoin "que" de lire les ligne, inutile d'utiliser le scanner, le BufferedReader fait très bien l'affaire
    Si tu as besoin de lire des entiers, des mots, des caractères, etc comme on le demandrais à un utilisateur au clavier, alros utiliser la classe scanner.

    Pour la lecture "lignes et entier", ça dépend de ton besoin.

    Si parfois c'est une ligne, parfois un entier -> un seul scanner suffit,.
    Si les deux en meme temps (tu as besoin de "12 34 56" ET de {12,34,56} à partir d'une seule ligne), alors lire la ligne avec un buffered reader et utiliser un scanner sur la ligne en question

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new Scanner(new StringReader(ligne));

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    476
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 476
    Points : 595
    Points
    595
    Par défaut
    D'accord avec tchize_, le BufferReader ferait très bien l'affaire.
    Le scanner n'est pas plus performant. Il ajoute seulement quelques services en plus, dont tu n'as pas vraiment besoin.

    J'ai besoin de la classe Scanner pour lire ligne par ligne mais aussi je veux lire les différents champs d'une ligne délimités par un séparateur,
    Pour retrouver les différents champs de chaque ligne lue, tu peux utiliser la méthode split(String regex) de la classe String.

    Exemple avec le séparateur :::
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    BufferedReader reader = new BufferedReader(new FileReader("tonfichier.data"));
    String currentLine;
    while ((currentLine = reader.readLine()) != null) {
       String[] tokens = currentLine.split(":::");
      // Traiter les champ de la ligne stockés dans tokens
    }

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 298
    Points : 85
    Points
    85
    Par défaut Ecriture et Perf
    Bonjour,

    je code un batch Java dans lequel jecris dans un fichier mais aussi je crée des fichiers

    en terme de perf est ce bien de faire pour chaque ecriture comme ci-dessous OU ya til dautre façon meilleurs surtout s'il s'agit des milliers de lignes à ecrire...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    bufferedWriter.write(currentContract.getDnNumber(),0,currentContract.getDnNumber().length());
    				bufferedWriter.newLine();
    Merci

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 564
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 564
    Points : 21 629
    Points
    21 629
    Par défaut
    Des milliers de lignes, ce n'est rien.

    Je vois pas de gros problème de perfs, mais il est inutile d'appeler write() à 3 arguments si c'est pour écrire la String entière. write() à un argument est très bien.

Discussions similaires

  1. Réponses: 9
    Dernier message: 03/07/2014, 18h08
  2. lire fichier .txt (NOTEPAD) ligne par ligne
    Par skambram dans le forum VB.NET
    Réponses: 1
    Dernier message: 06/06/2009, 18h41
  3. lire un fichier de string ligne par ligne
    Par bilzzbenzbilz dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 11/02/2009, 10h44
  4. [lecture d'un fichier] ligne par ligne
    Par pitit777 dans le forum C++
    Réponses: 3
    Dernier message: 26/11/2005, 11h22
  5. [debutant]lecture fichier ligne par ligne
    Par Battosaiii dans le forum C
    Réponses: 2
    Dernier message: 13/11/2005, 19h02

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