編集:スーパーCSV2.1.0の更新
Super CSV 2.1.0以降、QuoteMode
通常は必要ない場合に見積もりを有効にするために、設定を介してを指定できるようになりました。すべての列を引用するには、組み込みのを使用できますAlwaysQuoteMode
。特定の列の引用符を有効にする場合は、を使用しColumnQuoteMode
ます。この方法で引用を無効にすることはできないことに注意してください。無効にするには、独自CsvEncoder
に引用を指定する必要があります。
そのフォーラムの投稿を私の注意を引いてくれてありがとう!Kasperはその機能の実装に取り掛かっていなかったようです。次のリリースで何ができるか見ていきます:)
スーパーCSVソースをハッキングしてこの「すべてを引用」機能を追加する代わりに、独自のプロジェクトでスーパーCSV実装を拡張できます。前述のように、Super CSVは、特殊文字(引用符、カンマなど)が含まれている場合にのみフィールド全体を引用します。また、フィールドに先頭/末尾のスペースが含まれている場合も引用します。
Writer
これを念頭に置いて、メソッドをオーバーライドする独自の記述ができない理由はありませんescapeString()
(まだ引用されていないことを確認する必要があります)。
package org.supercsv.io;
import java.io.Writer;
import org.supercsv.prefs.CsvPreference;
public class QuoteAllCsvBeanWriter extends CsvBeanWriter {
public QuoteAllCsvBeanWriter(Writer writer, CsvPreference preference) {
super(writer, preference);
}
@Override
protected String escapeString(String csvElement) {
// perform normal escaping
final String escaped = super.escapeString(csvElement);
// add surrounding quotes if required
final String quote = String.valueOf((char) preference.getQuoteChar());
if (escaped.startsWith(quote) && escaped.endsWith(quote)){
return escaped;
} else {
return quote + escaped + quote;
}
}
}