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 :

Quelle est la meilleure méthode pour lire un String ligne par ligne ?


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Mr.Robot12
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 189
    Par défaut Quelle est la meilleure méthode pour lire un String ligne par ligne ?
    Bonjour,
    j'ai une question : Quelle est la meilleure méthode pour lire un String ligne par ligne ?
    je m'explique : j'ai environ 16820 fichiers à lire 1 par 1, c'est des fichiers .eml. je dois lire le corps du message. Jusque là tout va bien
    voici ma fonction qui lit ces fichiers :
    Code JAVA : 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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    public synchronized void lireTout()
        {
            ArrayList<String> allFiles = new ArrayList<String>();
            listeRepertoire(new File("C:\\Users\\moi\\Desktop\\bilans batch satelit 2016\\dossiers extraites"), allFiles);
     
            try
            {
                File f;
                FileReader fr;
                BufferedReader br;
     
                Properties props;
                Session mailSession;
                InputStream source;
                MimeMessage message;
                Email email;
     
                for (String file : allFiles)
                {
                    f = new File(file);
                    fr = new FileReader(f);
                    br = new BufferedReader(fr);
                    System.out.println(f.getAbsolutePath());
     
                    //utilisation de l'API MimeMessage pour ouvrir les fichiers .eml
                    props = System.getProperties();
                    props.put("mail.host", "smtp.dummydomain.com");
                    props.put("mail.transport.protocol", "smtp");
                    mailSession = Session.getDefaultInstance(props, null);
                    source = new FileInputStream(f);
                    message = new MimeMessage(mailSession, source);
     
                    //utilisation de l'API Email pour la lecture du corps des messgages.
                    String body = null;
                    if (!f.getName().endsWith(".html"))
                    {
                        email = EmailConverter.mimeMessageToEmail(message);
                        // System.out.println(email.getText());
                        body = email.getText();
     
                        BufferedReader reader = new BufferedReader(new StringReader(body));
                        String line = reader.readLine();
     
                        while (line != null)
                        {
                            System.out.println(line.length() + " " + line); //pour l'instant je ne fais qu'afficher pour tester
                            line = reader.readLine();
                        }
                        reader.close();
                    }
                    br.close();
                    fr.close();
                }
            }
            catch (IOException | MessagingException exception)
            {
                System.out.println("Erreur lors de la lecture : " + exception.getMessage());
            }
        }

    perso j'ai utilisé BufferedReader reader = new BufferedReader(new StringReader(<string>)); mais j'ai vu qu'il y avait d'autres façons de le faire comme :
    Code JAVA : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    final String eol = System.getProperty("line.separator");
    output = output.substring(output.indexOf(eol + 1));
    ou :
    Code JAVA : Sélectionner tout - Visualiser dans une fenêtre à part
    String[] lines = myString.split(System.getProperty("line.separator"));
    ou encore :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Scanner scanner = new Scanner(myString);
    while (scanner.hasNextLine()) {
      String line = scanner.nextLine();
      // process the line
    }
    scanner.close();
    voilà
    je voulais juste savoir lequel est le mieux en sachant le nombre de fichiers à lire
    d'après ce que j'ai vu sur internet c'est BufferedReader le plus rapide mais je voulais vous demander pour être sur (pour mon cas)
    merci

  2. #2
    Expert éminent
    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 : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    LA question est plutot "pourquoi est-ce que tu as besoin de lire un html ligne par ligne?" Les retours à la ligne dans du html n'ont pas de signification particulière. Si le but est d'afficher l'html dans la console, tu peux le faire en envoyant directement ta String incluant le retours à la ligne.

    Au delà de ça, le plus efficace sans se prendre la tête pour décomposer un String, c'est sa méthode split.
    Wrapper la String dans un StringReader et ensuite balancer ça dans une BufferedReader, c'est rajouter plein de strings inutiles dans le chemin et sur compliquer le process.

  3. #3
    Membre confirmé Avatar de Mr.Robot12
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 189
    Par défaut
    en faite pour l'instant je fais de l'affichage dans la console pour tester. mais après ces informations seront mis dans des objets pour ensuite stocker dans une BDD

  4. #4
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Peu importe. Ce ne sera pas ligne par ligne de toute façon.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre confirmé Avatar de Mr.Robot12
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 189
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Peu importe. Ce ne sera pas ligne par ligne de toute façon.
    si justement il y a des données que je dois extraire ligne par ligne : c'est la première et la 3e section dans chaque fichier

  6. #6
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Par défaut
    Je dis ça, je dis rien, mais le code est quand même assez goret.
    Je constate que tu utilises du multicatch, donc que tu es au moins en java 7. Tu peux utiliser les try/with resources pour alléger ton code.

    Cependant. Comme tu utilises une conversion brute et que tu dois dans tous les cas charger en mémoire l'intégralité de ton message, autant utiliser un simple split (comme l'a souligné tchize)

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 08/06/2009, 14h46
  2. Réponses: 3
    Dernier message: 21/01/2009, 22h47
  3. Réponses: 2
    Dernier message: 10/07/2008, 12h29
  4. [HTML] quelle est la meilleure méthode pour changer la langue d'un site?
    Par poupouille dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 18/02/2008, 12h17
  5. Réponses: 20
    Dernier message: 27/06/2006, 17h42

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