CSV出力
きょうは久しぶりにjavaの日記!!!!!!!!!!!!!!!
CSV出力の方法を書きます。
supercsvを使います。
SuperCSV API
まずはsupercsvをダウンロード。いつものようにプロジェクトのpom.xmlに以下を追加して、mvn eclipse:eclipse
<dependency> <groupId>net.sourceforge.supercsv</groupId> <artifactId>supercsv</artifactId> <version>1.52</version> </dependency>
今回は「名前・年齢・部署」が載った簡単なCSVファイルの作成です。
ダウンロードするページのclass
package jp.ne.hatena.syoko_sasaki; import java.io.IOException; import java.io.OutputStream; import java.util.ArrayList; import java.util.List; import org.apache.wicket.PageParameters; import org.apache.wicket.markup.html.WebPage; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.link.Link; import org.apache.wicket.request.target.resource.ResourceStreamRequestTarget; import org.apache.wicket.util.resource.AbstractResourceStreamWriter; public class HomePage extends WebPage { private static final long serialVersionUID = 1L; public HomePage(final PageParameters parameters) { add(new Label("message", "CSVをダウンロードするよ!!!")); final List<ChargePerson> ChargePersonList = createChargePerson(); add(new Link("chargePersonDownloadButton", null) { private static final long serialVersionUID = 1L; @Override public void onClick() { this.getRequestCycle().setRequestTarget(new ResourceStreamRequestTarget(new AbstractResourceStreamWriter() { private static final long serialVersionUID = 1L; public String getContentType() { return "application/octet-stream;charset=MS932"; } public void write(OutputStream output) { try { ChargePersonCsv.write(output, ChargePersonList); } catch (IOException e) { e.printStackTrace(); } } }, "chargePerson.csv")); } }); } //CSVに表示させるデータ作成 private List<ChargePerson> createChargePerson() { List<ChargePerson> result = new ArrayList<ChargePerson>(); result.add(new ChargePerson("shokos", 24, "hoge部署")); result.add(new ChargePerson("yoshiori", 35, "foo部署")); return result; }; }
対応するhtml
<html> <head> <title>CSVダウンロード</title> </head> <body> <span wicket:id="message">メッセージ</span> <button wicket:id="chargePersonDownloadButton">CSV出力</button> </body> </html>
出力するデータ型class
package jp.ne.hatena.syoko_sasaki; import java.io.Serializable; public class ChargePerson implements Serializable{ private static final long serialVersionUID = 1L; private String name; private int old; private String department; /** * @param name * @param old * @param department */ public ChargePerson(String name, int old, String department) { super(); this.name = name; this.old = old; this.department = department; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getOld() { return old; } public void setOld(int old) { this.old = old; } public String getDepartment() { return department; } public void setDepartment(String department) { this.department = department; } public static long getSerialversionuid() { return serialVersionUID; } }
CSVをつくるclass
package jp.ne.hatena.syoko_sasaki; import java.io.BufferedWriter; import java.io.IOException; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import org.apache.wicket.util.lang.PropertyResolver; import org.supercsv.io.CsvMapWriter; import org.supercsv.io.ICsvMapWriter; import org.supercsv.prefs.CsvPreference; public class ChargePersonCsv { //ヘッダを作成 static final Map<String,String> HEADER_MAP = new LinkedHashMap<String, String>(); static{ HEADER_MAP.put("name", "名前"); HEADER_MAP.put("old", "年齢"); HEADER_MAP.put("department", "部署"); }; public static void write(OutputStream output, List<ChargePerson> chargePersonList) throws IOException { ICsvMapWriter writer = new CsvMapWriter(new BufferedWriter(new OutputStreamWriter(output,"MS932")), CsvPreference.EXCEL_PREFERENCE); String[] nameMappings = HEADER_MAP.keySet().toArray(new String[0]); try { writer.write(HEADER_MAP,nameMappings); for(ChargePerson chargePerson : chargePersonList){ Map<String,Object> map = new HashMap<String, Object>(); for(String key : HEADER_MAP.keySet()){ Object result = PropertyResolver.getValue(key,chargePerson); if(result == null){ result = ""; } map.put(key, result); } writer.write(map, nameMappings); } } finally { writer.close(); } } }
実行結果
わーいできた