Velocity の foreach 使い方にすぎない

Velocity1.6.2の機能をうまく使えば org.apache.commons.lang.StringUtils#join を使わなくても
もっとスマートにできるはず。
velocityHasNext変数を判断してカンマを付与するかどうか。。。

ここに書いたのは、Velocity の foreach の使い方であり
CSV ファイルを作るのには適さない。

Javaの方で、、
List<String> list = new ArrayList<String>();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
この list を Velocity に渡して、Velocityテンプレートは、次の1行で済む。

#foreach($v in $list)$v#if($velocityHasNext==true),#end#end

また、evaluate を使うなら、、、
    StringWriter writer = new StringWriter();
    VelocityContext context = new     VelocityContext();
    VelocityEngine velocityEngine = new VelocityEngine();
    velocityEngine.init(prop); // 適当な属性で初期化
    context.put("list",list);
    velocityEngine.evaluate(context,writer,"","#foreach($v in $list)$v#if($velocityHasNext==true),#end#end");

    System.out.println(writer.getBuffer().toString());

という具合である。
evaluate の第3引数、logTag は、Velocity1.6.2 からNULLは許されてないようだ。
Velocityのログを出す時のマーキングに使用される文字列で、
runtime.log.logsystem.class = org.apache.velocity.runtime.log.NullLogSystem
の設定をすることが多いので空文字列を与える。