Générer des fichiers CSV avec Apache Velocity

 

Apache Velocity est un projet de la Fondation Apache. Velocity est un moteur de template, basé sur Java. Il permet aux concepteurs de pages web de faire référence à des méthodes définies dans du code Java.

 

Cet article explique comment utiliser Apache Velocity pour générer un fichier CSV à partir d’un code Java et d’un Template Velocity. Voici un schéma pour mieux comprendre le fonctionnement de ces Templates :

 

 

image

 

Voici un exemple de  code Java très simple :

 

package com.gognamunish.test;

import org.apache.velocity.app.Velocity;

import org.apache.velocity.Template;

import org.apache.velocity.VelocityContext;

import java.io.File;

import java.io.FileWriter;

import java.io.StringWriter;

import java.text.DateFormat;

import java.text.SimpleDateFormat;

import java.util.ArrayList;

import java.util.Date;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

public class CSVFeedGeneration {

static DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");

static DataFeed dataFeed;

static {

// prepare some static data

dataFeed = new DataFeed();

List<Map<String, Object>> dataList = new ArrayList<Map<String, Object>>();

Map<String, Object> data = new HashMap<String, Object>();

data.put("TransactionId", 1);

data.put("Amount", new Integer(2312));

data.put("Currency", "SGD");

data.put("ExecutionDate", dateFormat.format(new Date()));

dataList.add(data);

data = new HashMap<String, Object>();

data.put("TransactionId", 2);

data.put("Amount", new Integer(1212));

data.put("Currency", "INR");

data.put("ExecutionDate", dateFormat.format(new Date()));

data.put("Status", "Active");

dataList.add(data);

dataFeed.getFeedData().add(dataList);

}

public static void main(String[] args) throws Exception {

VelocityContext context = new VelocityContext();

FileWriter writer = new FileWriter(new File("feed.csv"));

// inject the objects to be used in template

context.put("feed", dataFeed);

context.put("DELIMETER", ",");

context.put("NEWLINE", "\n");

Velocity.init();

Template template = Velocity.getTemplate("csvfeed.vm");

template.merge(context, writer);

writer.flush();

writer.close();

}

}

 

Voci un exemple de Template (csvfeed.vm) :

 

TransactionId${DELIMETER}Amount${DELIMETER}ExecutionDate ${DELIMETER}Currency${DELIMETER}Status$NEWLINE
#foreach( $rowSet in $feed.feedData)
#foreach( $row in $rowSet )
$!row.get("TransactionId")$DELIMETER$!row.get("Amount") $DELIMETER$!row.get("ExecutionDate")$DELIMETER $!row.get("Currency")$DELIMETER$!row.get("Status")$NEWLINE
#end
#end

 

Et voici le résultat obtenu (feed.csv) :

 

TransactionId,Amount,ExecutionDate,Currency,Status

1,2312,2013-08-18T14:29:35,SGD,

2,1212,2013-08-18T14:29:35,INR,Active

 

Voci les dépendances à ajouter dans le fichier pom.xml :

 

<dependency>

<groupId>org.apache.velocity</groupId>

<artifactId>velocity</artifactId>

<version>1.7</version>

</dependency>

 

Conclusion :

 

L’avantage principal de ce framework est qu’il est possible de changer le format des données sans pour autant changer le code Java. C’est un moyen simple et rapide de générer des fichiers CSV dans un projet Java .

Source :

 

http://velocity.apache.org/engine/devel/index.html

0 responses on "Générer des fichiers CSV avec Apache Velocity"

Leave a Message

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

© WayofCode. All rights reserved.

Setup Menus in Admin Panel