Изменить: обновление для Super CSV 2.1.0
Начиная с Super CSV 2.1.0, теперь вы можете указать QuoteMode
в настройках, чтобы включить кавычки, когда они обычно не требуются. Чтобы процитировать каждый столбец, вы можете использовать встроенный AlwaysQuoteMode
. Если вы хотите включить кавычки для определенных столбцов, используйте функцию ColumnQuoteMode
. Обратите внимание, что вы не можете отключить цитирование таким образом, вам нужно будет указать свой собственный CsvEncoder
, чтобы сделать это.
Спасибо, что обратили мое внимание на сообщение на форуме! Похоже, Каспер не удосужился реализовать эту функцию. Я посмотрю, что я могу сделать для предстоящего выпуска :)
Вместо того, чтобы взламывать исходный код Super CSV, чтобы добавить эту функцию «цитировать все», вы можете расширить реализацию Super 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;
}
}
}
person
James Bassett
schedule
17.04.2012