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 :

Import fichier CSV


Sujet :

Java

  1. #1
    Membre régulier Avatar de dedeloux
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 104
    Points : 75
    Points
    75
    Par défaut Import fichier CSV
    Bonjour à tous,

    Je voudrais importer les données contenues dans un fichier CSV vers ma base de données Oracle.

    Voici le code que j'utilise :
    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
    39
    40
    41
    42
    43
    44
     
     
    		String ligne;
    		String [] header = null;
    		try {
     
    			BufferedReader br = new BufferedReader(new FileReader(file));
     
    			while((ligne=br.readLine()) != null) {
    				if (ligne.startsWith("id")){
    					header = ligne.split("\\;");
    					ligne=br.readLine();
    				}				
    				WebVisitor webVisitor = new WebVisitor();
    				WebVisitorSite webVisitorSite = new WebVisitorSite();
     
    				String[] splitted = ligne.split("\\;");
    				webVisitor.setTitle(splitted[1]);
    				webVisitor.setLastname(splitted[2]);
    				webVisitor.setLastname2(splitted[3]);
    				webVisitor.setFirstname(splitted[4]);
    				webVisitor.setEmail(splitted[5]);
     
    				webVisitorDao.saveWebVisitor(webVisitor);
     
    				webVisitorSite.setWebVisitor(webVisitor);
    				webVisitorSite.setSite(siteDao.getSite(new Integer(2)));
    				webVisitorSite.setValidated(Boolean.valueOf(splitted[27]).booleanValue());
    				for (int i=28;i<header.length;i++){
    						webVisitorSite.setAttribut(header[i], splitted[i]);
    				}
    				webVisitorSiteDao.saveWebVisitorSite(webVisitorSite);			
     
    				}
    			}
     
    			br.close();
     
    		}
    		catch (Exception e){
    			e.printStackTrace();
    		}
     
        }
    Tout d'abord j'ai une question : le fichier CSV se trouvera sur la machine cliente et ce code sur serveur un distant. Est ce que je peux me servir d'un BufferedReader pour lire le fichier CSV sur la machine cliente ? Si oui, est ce que c'est une bonne solution enterme de performances ? Si non , qu'elle est la solution que je dois utiliser ?

    Ensuite, je rencontre un problème pour récupérer les champs vides. Si mes dernieres colonnes de mon fichier CSV sont vides, Excel ne me génère pas les séparateurs, ce qui fait que je ne peux pas récupérer mes dernières valeurs (et il se trouve que j'en ai besoin bien sur ) Est ce que quelqu'un aurait une idée sur la façon de régler ce problème ?

    Troisième question : je récupère le chemin de mon fichier depuis un "input type=file" depuis une jsp. Depuis IE, je récupère le chemin de mon fichier compte et sur Firefox seulement le nom du fichier. J'ai donc fait un petit script qui me retourne la valeur du champ "file" dans un champ caché. Jusqua là, pas de problème. Une fois mon chemin récupérer, et comme je travaille sur windows, je dois modifier ma chaîne de caractère pour qu'elle puisse être interprétée par l'OS.

    Pour être plus précise, je récupère cette chaîne depuis ma JSP :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    C:\dev\projets\test.csv
    Je le transforme pour qu'elle ressemble à ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    C:\\dev\\projets\\test.csv
    Ma question est : existe t-il une méthode pour faire ce genre de choses de façon plus propre qu'avec un replaceAll et qui serait compatible avec Windows et Unix ? J'ai vu que je pouvais me servir du File.separatorChar mais je n'arrive pas à l'utiliser correctement
    Quelqu'un aurait il déjà fait ce genre de choses ?

    Merci beaucoup pour votre aide.
    Audrey

  2. #2
    in
    in est déconnecté
    Membre expérimenté Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Points : 1 718
    Points
    1 718
    Par défaut
    je n'ai pas tout lu mais tu devrais regarder du côté de l'outil sqlloader ... c'est fait exprès pour ça ...
    "If email had been around before the telephone was invented, people would have said, 'Hey, forget email! With this new telephone invention I can actually talk to people!"

    Besoin d'une nouvelle méthode pour développer ? -> http://www.la-rache.com/

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2007
    Messages : 149
    Points : 167
    Points
    167
    Par défaut
    Salut je suis pas expert mais je vais essayer de faire avancer ton shmilblik !

    Pour la question 2 je verrais un algo dans le genre :

    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
     
     
    switch (splitted.length)
    	{
    	case(5):
    		webVisitor.setEmail(splitted[5]);
    	case(4):
    		webVisitor.setFirstname(splitted[4]);
    	case(3):
    		webVisitor.setLastname2(splitted[3]);
    	case(2):
    		webVisitor.setLastname(splitted[2]);
    	case(1):
    		webVisitor.setTitle(splitted[1]);
    	}
    Comme tu n'as pas de break ... enfin le principe du goto.

    Pour la question 1 et 3 (j'ai pas vu la dif), il faut que tu télécharges le fichier sur le serveur de manière temporaire, que tu le lise (depuis emplacement serveur) puis que tu le supprime. Je ne pense pas que tu puisses cibler un fichier distant en HTTP.

    Mais d'autres me corrigeront peut être
    Mon site : TKT-Web =)

Discussions similaires

  1. Import fichier CSV
    Par oki972 dans le forum SQLite
    Réponses: 5
    Dernier message: 08/10/2007, 20h58
  2. [Pb Importation fichier CSV]
    Par Jeremie_Vi dans le forum Access
    Réponses: 2
    Dernier message: 04/05/2007, 06h54
  3. Importation fichier CSV Excel
    Par @lex(is) dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 22/06/2006, 02h16
  4. Update de plusieurs tables, import fichier csv sql loader
    Par fusuke dans le forum SQL*Loader
    Réponses: 2
    Dernier message: 18/05/2006, 15h08
  5. Réponses: 9
    Dernier message: 31/01/2006, 22h42

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