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

Documents Java Discussion :

Les fichiers CSV avec Java [Tutoriel]


Sujet :

Documents Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur
    Avatar de thierryler
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    4 078
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 078
    Par défaut Les fichiers CSV avec Java
    Le format CSV est, aujourd'hui encore, largement utilisé. Il fait le bonheur des équipes de développement car il est simple à manipuler. La lecture d'un fichier au format CSV demande toutefois un certain nombre de compétences.

    Je propose ici un article qui aborde les points clés à maîtriser, pas à pas avec une difficulté progressive, pour savoir traiter le célèbre CSV. Il y aurait beaucoup de choses à ajouter, notamment à propos des fichiers volumineux, mais l'essentiel est là pour bien commencer.

    L'article se trouve à l'adresse suivante : http://thierry-leriche-dessirier.dev...csv-avec-java/

    Tous les commentaires, surtout ceux qui disent du bien et m'encouragent (lol), sont les bienvenus.

    Bonne lecture.
    Thierry Leriche-Dessirier
    Consultant Java JEE Web Agile freelance
    Rédacteur pour Developpez
    Professeur de Génie Logiciel à l'ESIEA

    Site : http://www.icauda.com / Linked'in : http://www.linkedin.com/in/thierryler / Twitter : @ThierryLeriche

  2. #2
    Membre émérite Avatar de Jidefix
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    742
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 742
    Par défaut
    Bonjour,
    je n'ai pas été jusqu'en bas, mais ai été surpris de voir que Excel ne modifiait pas les fichiers .csv.
    Là où je travaille nous avons justement eu pas mal de problème avec des fichiers CSV ouverts avec Excel (2000 et 2003), où apparaissent subitement des guillemets autour des champs, où les dates changent de format, où des 0 deviennent des 0.0...
    Je ne sais pas ce qu'il en est d'Excel 2007 et 2010 mais il me semble important de le mentionner!

  3. #3
    Rédacteur
    Avatar de thierryler
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    4 078
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 078
    Par défaut
    Effectivement je n'ai pas testé sur les vieilles versions d'Excel. Les captures ont été faites sur 2010. Du coup ma remarque sur Open office est peut-être également valable pour Excel 2003.
    Thierry Leriche-Dessirier
    Consultant Java JEE Web Agile freelance
    Rédacteur pour Developpez
    Professeur de Génie Logiciel à l'ESIEA

    Site : http://www.icauda.com / Linked'in : http://www.linkedin.com/in/thierryler / Twitter : @ThierryLeriche

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 13
    Par défaut
    Merci pour ce tuto complet sur les CSV.

    Il est vrai que ces fichiers sont plus légers que des fichiers XML mais selon moi ils sont infiniment plus compliqués du fait de l'absence de règles. Prendre en compte tous les cas se révèle complexe comme le montre votre tutorial finalement (16 paragraphes quand même).
    Au moins avec le XML il y a les DTD ou les XSD qui permettent de vérifier l'intégrité du fichier avant la lecture.

    Toutes les applications proposent des export CSV mais jamais sous la même forme (séparateur duifférents, pas de protections, ...) et au final c'est pénible à intégrer. Combien d'imports plantent en plein milieu parce que notre parseur de fichier CSV ne prend pas tout en charge?

    Enfin, je trouve dommage que la notion d'encodage des caractères ne soit pas évoquée bien que la problématique soit plus large que la lecture de fichiers CSV. C'est très souvent une source de problèmes.
    Le code proposé n'est donc pas 100% portable (NB: je n'ai pas téléchargé le .zip) puisque les classes "bas niveau" utilisées pour lire le fichier vont s'appuyer sur l'encodage par défaut de la JVM. En tout cas j'espère que vos élèves sont sensibilisés, sinon j'imagine bien leur déconvenue lorsqu'ils reprendront vos sources pour lire un fichier CSV encodé en UTF-8, sous Windows...

  5. #5
    Rédacteur
    Avatar de thierryler
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    4 078
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 078
    Par défaut
    Effectivement l'article pourrait encore traiter un grand nombre de choses. Quand j'ai réalisé qu'il y avait autant de pages, j'ai reporté ces ajouts pour une prochaine version. J'avoue toutefois que je n'avais pas pensé à l'encoding.

    Le format CSV possède un avantage sur le XML, c'est son poids. En effet, lorsqu'il y a des millions de lignes, ça fait une grosse différence. Dans tous les cas, avec les fichiers volumineux, on utilise des techniques qui ne sont pas présentées dans l'article.
    Thierry Leriche-Dessirier
    Consultant Java JEE Web Agile freelance
    Rédacteur pour Developpez
    Professeur de Génie Logiciel à l'ESIEA

    Site : http://www.icauda.com / Linked'in : http://www.linkedin.com/in/thierryler / Twitter : @ThierryLeriche

  6. #6
    Membre éprouvé
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 898
    Par défaut
    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
     
    public static List<String> readFile(File file) {
     
            List<String> result = new ArrayList<String>();
     
            FileReader fr = new FileReader(file);
            BufferedReader br = new BufferedReader(fr);
     
            for (String line = br.readLine(); line != null; line = br.readLine()) {
                result.add(line);
            }
     
            br.close();
            fr.close();
     
            return result;
    }

    La méthode close() d'un stream ou d'un reader appelle automatiquement les méthods close() de ses enfants, conformément au pattern decorator. Donc vous ne devriez pas faire fr.close() car la ressource est déjà fermée et suivant les implémentations, vous pourriez vous manger une IOException.

    Par ailleurs votre boucle peut s'écrire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    while( (String line = br.readLine()) != null ) 
    {
       ...
    }

    Je lirai plus en détails ce soir ou demain.

    Il est vrai que ces fichiers sont plus légers que des fichiers XML mais selon moi ils sont infiniment plus compliqués du fait de l'absence de règles. Prendre en compte tous les cas se révèle complexe comme le montre votre tutorial finalement (16 paragraphes quand même).
    Au moins avec le XML il y a les DTD ou les XSD qui permettent de vérifier l'intégrité du fichier avant la lecture.
    C'est mitigé...
    La validation XSD est très coûteuse et bien souvent, elle ne permettra pas de se passer d'une validation métier "a mano". Et lire un gros fichier XML (de l'ordre des 500mo-1GB) est infiniment plus complexe que lire un gros fichier CSV.

    Toutes les applications proposent des export CSV mais jamais sous la même forme (séparateur duifférents, pas de protections, ...) et au final c'est pénible à intégrer. Combien d'imports plantent en plein milieu parce que notre parseur de fichier CSV ne prend pas tout en charge?
    Je suis moyennement d'accord. CSV souffre de l'absence de spécification claire mais il est admis que les tokens sont séparés par des virgules, peuvent ou non être entourés de guillemets et qu'un dédoublement de guillemets sert d'échappement.
    Si vous intégrez ces règles, votre parseur peut facilement gérer 98% des sorties générées par d'autres produits.

Discussions similaires

  1. Problèmes avec les fichiers .txt en Java
    Par aghade dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 23/08/2011, 14h24
  2. Réponses: 2
    Dernier message: 15/08/2009, 01h51
  3. Importer 1 Fichier CSV avec des ";" dans les champs
    Par opaillon dans le forum Import/Export
    Réponses: 3
    Dernier message: 15/01/2009, 14h23

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