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 :

Lire fichier texte et insérer données eun BDD


Sujet :

Entrée/Sortie Java

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2014
    Messages : 10
    Points : 4
    Points
    4
    Par défaut Lire fichier texte et insérer données eun BDD
    Bonjour,
    j'ai besoin de votre aide pour un problème sur lequel je suis bloqué actuellement. je m'explique.
    je voudrais intégrer les données provenant d'un fichier texte de l'ordinateur directement sur une table de ma base de données.
    Pour cela j'ai un formulaire jsp qui me permet d'aller chercher le fichiers sur l'ordi avec la méthode post. Ensuite la servlet doit récupérer le fichier et insérer le contenu du fichier texte dans ma base de données. les données du fichiers texte sont séparé par des "," et sont mis ligne par ligne.
    J'ai deux problème majeurs.
    1) je veux en premier enregistrer le fichier sur un serveur pour effectue le traitement sur ce fichier et non celui du disque. Mais il me signal qu'il y'a une erreur sur le fichier de destination.
    2) je voudrais lire le contenu du fichier texte et l’insérer dans la base. Mais je suis bloqué en ce niveau.

    Merci de votre aide

    voici le code de ma jsp et la servlet en cas de besoin

    Code jsp : 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
    <%@ page pageEncoding="UTF-8" %>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8" />
    <title>Integration de fichiers</title>
    <link type="text/css" rel="stylesheet" href="<c:url
    value="/inc/style.css"/>" />
    <c:import url="/inc/menu.jsp" />
    </head>
    <body>
    <form action="<c:url value="/integration" />" method="post"
    enctype="multipart/form-data">
    <fieldset>
    <legend>Integration de fichier OPCVM</legend>
    <label for="description">Description du
    fichier</label>
    <input type="text" id="description"
    name="description" value="" />
    <span class="succes"><c:out value="${description}"
    /></span>
    <br />
    <br />
    <label for="fichier">Emplacement du fichier <span
    class="requis">*</span></label>
    <input type="file" id="fichier" name="fichier" />
    <c:out value="${fichier}"
    /></span>
    <br />
    <input type="submit" value="Envoyer"
    class="sansLabel" />
    <br />
    </fieldset>
    </form>
    </body>
    </html>

    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    package com.servlets;
     
    import javax.servlet.http.HttpServlet;
     
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.io.PrintWriter;
    import java.util.HashMap;
    import java.util.Map;
    import java.util.logging.Level;
    import java.util.logging.Logger;
     
    import javax.servlet.ServletException;
    import javax.servlet.annotation.MultipartConfig;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    import javax.servlet.http.Part;
     
    @WebServlet(name = "Integration", urlPatterns = {"/integration"})
    @MultipartConfig
    public class Integration extends HttpServlet {
    	private final static Logger LOGGER = 
                Logger.getLogger(Integration.class.getCanonicalName());
     
    	public static final String VUE_SUCCES = "/WEB-INF/rapportIntegration.jsp";
    	public static final String VUE_FORM = "/WEB-INF/integration.jsp";
    	public static final String CHAMP_DESCRIPTION = "description";
    	public static final String CHAMP_FICHIER = "fichier";
    	public void init() throws ServletException {
    /* connexion a la base de donnée */
    	} 
    	public void doGet( HttpServletRequest request,
    	HttpServletResponse response ) throws ServletException, IOException
    	{
    	/* À la réception d'une requête GET, simple affichage du
    	formulaire */
    	this.getServletContext().getRequestDispatcher( VUE_FORM).forward( request, response );
    }
     
    	public void doPost( HttpServletRequest request,
    	HttpServletResponse response ) throws ServletException, IOException
    	{
    	/*
     
       final String path = "C:\Users\....\Documents\destination";
        
    	String description = request.getParameter( CHAMP_DESCRIPTION );
    	Part part = request.getPart( CHAMP_FICHIER );
    	String nomFichier = getNomFichier(part);
    	OutputStream out = null;
        InputStream contenu = null;
        final PrintWriter writer = response.getWriter();
     
        try {
            out = new FileOutputStream(new File(path + File.separator
                    + nomFichier));
            contenu = part.getInputStream();
     
            int read = 0;
            final byte[] bytes = new byte[1024];
     
            while ((read = contenu.read(bytes)) != -1) {
                out.write(bytes, 0, read);
            }
            writer.println("New file " + nomFichier + " created at " + path);
            LOGGER.log(Level.INFO, "File{0}being uploaded to {1}", 
                    new Object[]{nomFichier, path});
        } catch (FileNotFoundException fne) {
            writer.println("You either did not specify a file to upload or are "
                    + "trying to upload a file to a protected or nonexistent "
                    + "location.");
            writer.println("<br/> ERROR: " + fne.getMessage());
     
            LOGGER.log(Level.SEVERE, "Problems during file upload. Error: {0}", 
                    new Object[]{fne.getMessage()});
        } finally {
            if (out != null) {
                out.close();
            }
            if (contenu != null) {
                contenu.close();
            }
            if (writer != null) {
                writer.close();
            }
        }
        
        if ( nomFichier != null && !nomFichier.isEmpty() ) {
        	String nomChamp = part.getName();
        	request.setAttribute( nomChamp, description );
        	}
        	this.getServletContext().getRequestDispatcher( VUE_SUCCES ).forward(request, response );
        	
    }
     
    public String getNomFichier(Part part) {
        final String partHeader = part.getHeader("content-disposition");
        LOGGER.log(Level.INFO, "Part Header = {0}", partHeader);
        for (String content : part.getHeader("content-disposition").split(";")) {
            if (content.trim().startsWith("filename")) {
                return content.substring(
                        content.indexOf('=') + 1).trim().replace("\"", "");
            }
        }
        return null;
    }
     
     
    }

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par conefaye Voir le message
    1) je veux en premier enregistrer le fichier sur un serveur pour effectue le traitement sur ce fichier et non celui du disque. Mais il me signal qu'il y'a une erreur sur le fichier de destination.
    Ton code de stockage étant dans la servlet, il s'exécute bien sur le serveur et donc stocke dans l'arborescence du serveur. Tu peux expliquer plus en détail ce que tu as comme erreur / problème?

    Citation Envoyé par conefaye Voir le message
    2) je voudrais lire le contenu du fichier texte et l’insérer dans la base. Mais je suis bloqué en ce niveau.
    Et concrètement, tu bloque sur quoi? Qu'est-ce que tu as déjà essayé?

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2014
    Messages : 10
    Points : 4
    Points
    4
    Par défaut 1) enregistrement sur le disque
    Merci de votre réponse

    J'ai déjà changé le répertoire d'enregistrement et je l'ai mis dans l'arborescence de l'application. Et j'arrive à l'afficher en entier si je teste avec une image que je mets dans ma page de résultats.
    Maintenant le soucis c'est d'aller lire le contenu de mon fichier texte ligne par ligne et le stocker dans ma base de donner.
    Je sais pas quel fonction me permet de lire le contenu avec le caractère d'espacement qui est le ","

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2017
    Messages : 6
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par conefaye Voir le message
    Merci de votre réponse

    J'ai déjà changé le répertoire d'enregistrement et je l'ai mis dans l'arborescence de l'application. Et j'arrive à l'afficher en entier si je teste avec une image que je mets dans ma page de résultats.
    Maintenant le soucis c'est d'aller lire le contenu de mon fichier texte ligne par ligne et le stocker dans ma base de donner.
    Je sais pas quel fonction me permet de lire le contenu avec le caractère d'espacement qui est le ","
    Bonjour,

    Si je comprends bien, tu arrives à accéder a ton fichier texte mais tu ne sais pas comment le lire.

    Pour cela, tu peux utiliser un BufferedReader qui prend en paramettre un FileReader.

    Le BufferedReader a une methode qui s'appel readLine qui te retourne le fichier ligne par ligne, il te suffit en suite de split ta ligne suivant les "," pour récupérer un tableau contenant tes données


    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
     
    String CSVseparator = ",";
    String line = "";
    BufferedReader br = null;
    try{
    	br = new BufferedReader(new FileReader("YourTextFile.txt"));
    	while((line = br.readLine()) != null){
    		String[] params = line.split(CSVseparator);
    	}
    } catch (IOException e) {
    	e.printStackTrace();
    } finally {
    	try {
    		if (br != null)
    			br.close();
    	} catch (IOException ex) {
    		ex.printStackTrace();
    	}
    }
    J'espère que ça te sera utile

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2014
    Messages : 10
    Points : 4
    Points
    4
    Par défaut tableau buffereader
    Merci yanora.
    j'ai pu utiliser le BufferedReader pour extraire le contenu. Je vais a pressent essayer d'utiliser une Arraylist pour spliter ma ligne car les données sont mélangées entre string et date.
    Sinon, est ce qu'il y'as une fonction pour convertir les données string en date ou en double.
    Merci

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    String => date: simpledateformat
    String => double: Double.parse

  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2014
    Messages : 10
    Points : 4
    Points
    4
    Par défaut Convertion chaîne en double ou date
    J'ai bien utilisé
    double convert = Double.parseDouble(nom_champ);
    Mais cela me retour l'erreur suivante.
    Java. Lang.NumberFormatException: for string valeur(nom_champ)
    Et Double convert=Parse(nom_champ); n'est pas reconnu

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2017
    Messages : 6
    Points : 8
    Points
    8
    Par défaut
    Pourrais-tu nous fournir un exemple de date car je ne comprends pas les problèmes que tu as.

  9. #9
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2014
    Messages : 10
    Points : 4
    Points
    4
    Par défaut Exemple de date
    Par exemple si on prend la chaîne "01/01/2016" et on veut le remplacer par la date=01/01/2016.

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2017
    Messages : 6
    Points : 8
    Points
    8
    Par défaut
    je l'ai pas testé mais ça devrait fonctionner


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    Date getDateFmString(String dateString)
    {
     
     SimpleDateFormat sdf = new SimpleDateFormat("dd/mm/yyyy");
     Date convertedCurrentDate = sdf.parse(dateString);
     return convertedCurrentDate ;
    }
    si ça ne fonctionne pas, regarde la doc de SimpleDateFormat

  11. #11
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2014
    Messages : 10
    Points : 4
    Points
    4
    Par défaut Date convert
    Bon sa marche pas, je vais voir la bibliothèque.
    Je reviens vers vous.
    Merci

  12. #12
    Futur Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2017
    Messages : 6
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par conefaye Voir le message
    Bon sa marche pas, je vais voir la bibliothèque.
    Je reviens vers vous.
    Merci
    Alors, qu'est ce qui ne marche pas, qu'est ce que tu veux faire et pourquoi tu veux le faire ?

    J'ai testé le code que j'ai écris, il renvoie bien une date Java .

  13. #13
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2014
    Messages : 10
    Points : 4
    Points
    4
    Par défaut Convert date
    Il me renvoi bien une date mais pas au format jj/mm/yyyy. Alors j'ai décider de spliter la chaîne suivant le caractère "/". Convertir les trois résultat en entier.
    J'ai ensuite déclarer une date GregorianCalendar(int,int,int).

    Mais ici cela me ressort la date au complet avec le l'heure, minute, seconde.
    Je cherche encore comment le formater sous forme jj/mm/yyyy.
    Merci encore

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par conefaye Voir le message
    Il me renvoi bien une date mais pas au format jj/mm/yyyy.
    Une Date n'a pas de format, c'est juste un moment dans le temps. SimpleDateFormat sert à convertir String vers Date
    et de Date vers String.

  15. #15
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2014
    Messages : 10
    Points : 4
    Points
    4
    Par défaut Insérer fichier texte dans base de données.
    J'ai finalement pu régler le problème de date.
    J'ai du utiliser la bibliothèque joda_time qui est vraiment plus adapté à la manipulation des dates.
    Je vous remercie vraiment de votre aide

Discussions similaires

  1. [Debutant] lire fichier text et enrgistrer dans BDD
    Par 3wicha dans le forum Windows Forms
    Réponses: 2
    Dernier message: 13/03/2008, 22h49
  2. Réponses: 10
    Dernier message: 28/12/2007, 16h58
  3. Lire fichier texte en respectant la police, la forme
    Par loupin dans le forum Langage
    Réponses: 2
    Dernier message: 10/07/2006, 22h49
  4. Réponses: 21
    Dernier message: 05/06/2006, 10h49
  5. Lire fichier Texte
    Par rprom1 dans le forum Entrée/Sortie
    Réponses: 12
    Dernier message: 15/03/2006, 16h36

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