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:
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:
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;
}
} |
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 ","
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
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