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
    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
    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é?
    David Delbecq Java developer chez HMS Industrial Networks AB. &#12288;&#12288;&#12288;LinkedIn | Google+

  3. #3
    Candidat au Club
    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
    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
    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
    String => date: simpledateformat
    String => double: Double.parse
    David Delbecq Java developer chez HMS Industrial Networks AB. &#12288;&#12288;&#12288;LinkedIn | Google+

  7. #7
    Candidat au Club
    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
    Pourrais-tu nous fournir un exemple de date car je ne comprends pas les problèmes que tu as.

  9. #9
    Candidat au Club
    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
    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
    Date convert
    Bon sa marche pas, je vais voir la bibliothèque.
    Je reviens vers vous.
    Merci

  12. #12
    Futur Membre du Club
    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
    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
    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.
    David Delbecq Java developer chez HMS Industrial Networks AB. &#12288;&#12288;&#12288;LinkedIn | Google+

  15. #15
    Candidat au Club
    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