All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.mygreen.supercsv.io.CsvAnnotationBeanWriter Maven / Gradle / Ivy

Go to download

CSVのJavaライブラリであるSuperCSVに、アノテーション機能を追加したライブラリです。

There is a newer version: 2.3
Show newest version
package com.github.mygreen.supercsv.io;

import java.io.BufferedWriter;
import java.io.IOException;
import java.io.Writer;
import java.util.Collection;
import java.util.Objects;

import org.supercsv.exception.SuperCsvException;
import org.supercsv.prefs.CsvPreference;

import com.github.mygreen.supercsv.builder.BeanMapping;
import com.github.mygreen.supercsv.builder.BeanMappingFactory;
import com.github.mygreen.supercsv.exception.SuperCsvBindingException;

/**
 * アノテーションを元にCSVファイルを出力するためのクラス。
 *
 * @param  マッピング対象のBeanのクラスタイプ
 * @version 2.1
 * @author T.TSUCHIE
 *
 */
public class CsvAnnotationBeanWriter extends AbstractCsvAnnotationBeanWriter {
    
    /**
     * Beanのクラスタイプを指定して、{@link CsvAnnotationBeanWriter}を作成するコンストラクタ。
     * 

{@link BufferedWriter}にラップして実行されるため、ラップする必要はありません。

* * @param beanType Beanのクラスタイプ。 * @param writer the writer * @param preference CSV preferences. * @param groups グループ情報。適用するアノテーションを切り替える際に指定します。 * @throws NullPointerException {@literal if beanType or writer or preferences are null.} */ public CsvAnnotationBeanWriter(final Class beanType, final Writer writer, final CsvPreference preference, final Class... groups) { super(writer, preference); Objects.requireNonNull(beanType, "beanType should not be null."); BeanMappingFactory factory = new BeanMappingFactory(); this.beanMappingCache = BeanMappingCache.create(factory.create(beanType, groups)); this.validators.addAll(beanMappingCache.getOriginal().getValidators()); } /** * Beanのマッピング情報を指定して、{@link CsvAnnotationBeanWriter}を作成するコンストラクタ。 *

{@link BufferedWriter}にラップして実行されるため、ラップする必要はありません。

*

Beanのマッピング情報を独自にカスタマイズして、{@link BeanMappingFactory}から作成する場合に利用します。

* * @param beanMapping Beanのマッピング情報。 * @param writer the writer * @param preference the CSV preferences. * @throws NullPointerException {@literal if beanMapping or writer or preferences are null.} */ public CsvAnnotationBeanWriter(final BeanMapping beanMapping, final Writer writer, final CsvPreference preference) { super(writer, preference); Objects.requireNonNull(beanMapping, "beanMapping should not be null."); this.beanMappingCache = BeanMappingCache.create(beanMapping); this.validators.addAll(beanMapping.getValidators()); } /** * ヘッダー情報を書き込みます。 *

ただし、列番号を省略され、定義がされていないカラムは、{@literal column[カラム番号]}の形式となります。

* @throws IOException ファイルの出力に失敗した場合。 */ public void writeHeader() throws IOException { super.writeHeader(getDefinedHeader()); } /** * レコードのデータを全て書き込みます。 *

ヘッダー行も自動的に処理されます。2回目以降に呼び出した場合、ヘッダー情報は書き込まれません。

*

レコード処理中に例外が発生した場合、その時点で処理を終了します。

* * @param sources 書き込むレコードのデータ。 * @throws NullPointerException sources is null. * @throws IOException レコードの出力に失敗した場合。 * @throws SuperCsvBindingException セルの値に問題がある場合 * @throws SuperCsvException 設定など、その他に問題がある場合 * */ public void writeAll(final Collection sources) throws IOException { writeAll(sources, false); } /** * レコードのデータを全て書き込みます。 *

ヘッダー行も自動的に処理されます。2回目以降に呼び出した場合、ヘッダー情報は書き込まれません。

* * @param sources 書き込むレコードのデータ。 * @param continueOnError continueOnError レコードの処理中に、 * 例外{@link SuperCsvBindingException}が発生しても、続行するかどうか指定します。 * trueの場合、例外が発生しても、次の処理を行います。 * @throws NullPointerException sources is null. * @throws IOException レコードの出力に失敗した場合。 * @throws SuperCsvBindingException セルの値に問題がある場合 * @throws SuperCsvException 設定など、その他に問題がある場合 * */ public void writeAll(final Collection sources, final boolean continueOnError) throws IOException { Objects.requireNonNull(sources, "sources should not be null."); if(beanMappingCache.getOriginal().isHeader() && getLineNumber() == 0) { writeHeader(); } for(T record : sources) { try { write(record); } catch(SuperCsvBindingException e) { if(!continueOnError) { throw e; } } } super.flush(); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy