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

Servlets/JSP Java Discussion :

Générer csv à la volée


Sujet :

Servlets/JSP Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Janvier 2004
    Messages
    242
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 242
    Par défaut Générer csv à la volée
    Bonjour,

    je voudrais générer dans ma servlet un fichier csv et le proposer en téléchargement au client.
    Je sais comment faire ça en créant physiquement le fichier mais je ne veux pas le créer justement. Je veux juste écrire les données dans le flux de sortie de la servlet et proposer au client le téléchargement du csv. Je ne sais pas quelle classe utiliser pour faire ça(printwiter, FileWriter, OutputStream,BufferedWriter ... y en a trop !! lol)

    merci de votre aide

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    tu reprend ton code qui le fait sur un fichier, sauf que d'utiliser les FileOutputStream vers ton fichier, tu utilise le response.getOutputStream() de la servlet.

  3. #3
    Membre éclairé
    Inscrit en
    Janvier 2004
    Messages
    242
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 242
    Par défaut
    je n'utilise pas de fileOutputStream...

    dans mon code, j'utilise un fileWriter puis un fileInputStream et j'écris dans ma Servlet. Voici mon code :

    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
    FileWriter writer = new FileWriter(filename);
    for(JobProfile j: (ArrayList<JobProfile>)ljob)
    {
    				writer.append("JOB");
    				writer.append(";");
    				if (j.getRef() != null)
    					writer.append(j.getRef().replace("\r\n", ""));
    				else
    					writer.append("");
    				writer.append(";");
    				writer.append(j.getName().replace("\r\n", ""));
    				writer.append(";");
    				......
    }
    File file = new File(fileName);
    response.setContentLength((int) file.length());
    response.setContentType("application/csv"); 
    response.setHeader("Content-disposition", "attachment; filename=report.csv");
    final FileInputStream fis = new FileInputStream(file);
    final OutputStream os = response.getOutputStream();
    byte[] fileContent = new byte[4096];
    int r = 0;
    while (r >= 0) {
    	r = fis.read(fileContent);
    	os.write(fileContent);
    }
    fis.close();
    os.flush();
    os.close();
    c'est vraiment quelque chose(ecriture/lecture) que je ne maitrise pas du tout

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Citation Envoyé par mikees Voir le message

    c'est vraiment quelque chose(ecriture/lecture) que je ne maitrise pas du tout
    CA fait pourtant partie des base du java, et il vaudrait mieux maitriser ca avant d'attaquer du J2EE. Dans ton cas, il suffit de remplacer le FileWriter (qui est un Writer) par le response.getWriter()

  5. #5
    Membre éclairé
    Inscrit en
    Janvier 2004
    Messages
    242
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 242
    Par défaut
    c'est vrai que ça fait partie des bases du java mais je m'y suis jamais vraiment attardé et pour l'instant je m'en suis toujours sortie en cherchant sur le net.Mais je compte bien m'y mettre sérieusement.
    Par contre je ne trouve pas qu'on ai besoin de maitriser les ecriture/lecture de fichier pour faire du J2ee,ce n'est pas le principal aspect des projets, en tout cas depuis maintenant 3 ans j'en ai presque jamais eu besoin.

    sinon, j'ai trouvé une solution donc je la donne pour ceux qui auraient aussi le même souci :

    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
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
    	{
     
    response.setContentType("application/csv");
    		response.setHeader("Content-disposition", "attachment; filename=trainee.csv");
     
    	    ServletOutputStream out = response.getOutputStream();
    		ExportTrainee exptrainee = new ExportTrainee();
    		StringBuffer sb;
    		InputStream in;
    		sb = exptrainee.exportcsv(request.getParameter("trainees").split(":"));
    			in = new ByteArrayInputStream(sb.toString().getBytes("UTF-8"));
     
     
    		byte[] outputByte = new byte[4096];
    		int len = 0;
    		while((len = in.read(outputByte, 0, 4096)) != -1)
    		{
    			out.write(outputByte, 0, len);
    		}
    		in.close();
    		out.flush();
    		out.close(); 
    }
    public StringBuffer exportcsv(String[] str)
    	{
    		StringBuffer writer = new StringBuffer();
    		Session session = HibernateUtil.currentSession();	
     
    		for (int i = 0; i < str.length; i++) 
    		{	
    			List<Trainee> ltrainee = (List<Trainee>)session.createCriteria(Trainee.class).add(Restrictions.like("id", Integer.parseInt(str[i]))).list();
    			if (ltrainee != null)
    			{
    				for(Trainee tr: (ArrayList<Trainee>)ltrainee)
    				{
    					writer.append(tr.getLastName().replace("\r\n", ""));
    					writer.append(";");
    					writer.append(tr.getFirstName().replace("\r\n", ""));
    					writer.append(";");
    					if (tr.getBirthDate() != null)
    					{
    						DateFormat date = new SimpleDateFormat("yyyy-MM-dd");
    						String birth = date.format(tr.getBirthDate());
     
    						writer.append(birth);
    					}
    					else
    						writer.append("");
    					writer.append(";");
    					if (tr.getPhotoPath() != null)
    						writer.append(tr.getPhotoPath().replace("\r\n", ""));
    					else
    						writer.append("");
    					writer.append("\n");	
    				}
    			}
    		}
    		return writer;
    	}
    Merci

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Citation Envoyé par mikees Voir le message
    Par contre je ne trouve pas qu'on ai besoin de maitriser les ecriture/lecture de fichier pour faire du J2ee,
    Non, mais être capable de consulter la javadoc et substituer une classe dans le code à une autre qui implémente la même interface, ca fait partie des bases de la POO en java il me semble.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PHP 5.0] Générer CSV et sauver dans dossier serveur
    Par stomerfull dans le forum Langage
    Réponses: 5
    Dernier message: 13/02/2012, 10h51
  2. Réponses: 1
    Dernier message: 07/03/2011, 11h40
  3. Générer image à la volée
    Par Runlevel dans le forum 4D
    Réponses: 5
    Dernier message: 03/12/2008, 20h43
  4. [CSV] générer csv avec tabulation comme séparateur
    Par van-bom dans le forum Langage
    Réponses: 4
    Dernier message: 15/11/2008, 01h18
  5. Générer CSV problème ouverture du fichier
    Par BenoitM dans le forum Framework .NET
    Réponses: 2
    Dernier message: 07/12/2007, 12h52

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