package integrationTest.issue3189428;
import au.com.bytecode.opencsv.CSVParser;
import au.com.bytecode.opencsv.CSVReader;
import au.com.bytecode.opencsv.CSVWriter;
import au.com.bytecode.opencsv.bean.ColumnPositionMappingStrategy;
import au.com.bytecode.opencsv.bean.CsvToBean;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.List;
public class CsvSample {
String filePath = "test/integrationTest/issue3189428/mysample.csv";
public static void main(String[] args)
throws Exception {
CsvSample sample = new CsvSample();
sample.doSample();
}
public CsvSample() {
}
public void doSample()
throws Exception {
// First write
String[] fields = new String[5];
fields[0] = "field1";
fields[1] = "3.0";
fields[2] = "3,147.25";
fields[3] = "$3,147.26";
// failing string
fields[4] = "Joe said, \"This is a test of a \nlong broken string,\" and Sally said, \"I bet it won't work.\" ";
// working string
// fields[4] = "Joe said, \"This is a test of a \nlong broken string,\" and Sally said, \"I bet it won't work.\"";
CSVWriter writer = new CSVWriter(new FileWriter(filePath));
writer.writeNext(fields); // let's make 3 rows so we can see it cleanly in Excel.
writer.writeNext(fields);
writer.writeNext(fields);
writer.close();
testRawCsvRead(fields[4]);
testMappingStrategyRead(fields[4]);
System.out.println("\nComplete. File written out to " + filePath);
}
/**
* This approach seems to work correctly, even with embedded newlines.
*
* @param originalCommentText
* @throws FileNotFoundException
* @throws IOException
*/
protected void testRawCsvRead(String originalCommentText)
throws FileNotFoundException, IOException {
CSVReader reader = new CSVReader(new FileReader(filePath));
String[] nextLine = null;
int count = 0;
while ((nextLine = reader.readNext()) != null) {
if (!nextLine[0].equals("field1")) {
System.out.println("RawCsvRead Assert Error: Name is wrong.");
}
if (!nextLine[1].equals("3.0")) {
System.out.println("RawCsvRead Assert Error: Value is wrong.");
}
if (!nextLine[2].equals("3,147.25")) {
System.out.println("RawCsvRead Assert Error: Amount1 is wrong.");
}
if (!nextLine[3].equals("$3,147.26")) {
System.out.println("RawCsvRead Assert Error: Currency is wrong.");
}
System.out.println("Field 4 read: " + nextLine[4]);
if (!nextLine[4].equals(originalCommentText)) {
System.out.println("RawCsvRead Assert Error: Comment is wrong.");
}
count++;
}
if (count != 3) {
System.out.println("RawCsvRead Assert Error: Count of lines is wrong.");
}
}
/**
* This approach seems to fail with embedded newlines; that might be a weakness of
* the mapping strategy support classes.
*
* @param originalCommentText
* @throws FileNotFoundException
*/
protected void testMappingStrategyRead(String originalCommentText)
throws FileNotFoundException {
ColumnPositionMappingStrategy mappingStrategy = new ColumnPositionMappingStrategy();
mappingStrategy.setType(MyBean.class);
String[] columns = new String[]{"name", "value", "amount1", "currency", "comments"}; // the fields to bind to in your JavaBean
mappingStrategy.setColumnMapping(columns);
CsvToBean csv = new CsvToBean();
CSVReader reader = new CSVReader(new FileReader(filePath), CSVParser.DEFAULT_SEPARATOR, CSVParser.DEFAULT_QUOTE_CHARACTER, CSVParser.DEFAULT_ESCAPE_CHARACTER, 0, false, false);
List<MyBean> list = csv.parse(mappingStrategy, reader);
if (list.size() != 3) {
System.out.println("Error - list size is wrong.");
}
MyBean myBean = list.get(2);
if (!myBean.getName().equals("field1")) {
System.out.println("MappingStrategy Assert Error: Name is wrong.");
}
if (!myBean.getValue().equals("3.0")) {
System.out.println("MappingStrategy Assert Error: Value is wrong.");
}
if (!myBean.getAmount1().equals("3,147.25")) {
System.out.println("MappingStrategy Assert Error: Amount1 is wrong.");
}
if (!myBean.getCurrency().equals("$3,147.26")) {
System.out.println("MappingStrategy Assert Error: Currency is wrong.");
}
printfield("MyBeanComments: ", myBean.getComments());
printfield("OriginalCommentText: ", originalCommentText);
if (!myBean.getComments().equals(originalCommentText)) {
System.out.println("MappingStrategy Assert Error: Comment is wrong.");
}
}
private void printfield(String header, String field) {
System.out.println(header + field);
System.out.println("fieldlen: " + field.length());
}
public static class MyBean {
String name;
String value;
String amount1;
String currency;
String comments;
public MyBean() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public String getAmount1() {
return amount1;
}
public void setAmount1(String amount1) {
this.amount1 = amount1;
}
public String getCurrency() {
return currency;
}
public void setCurrency(String currency) {
this.currency = currency;
}
public String getComments() {
return comments;
}
public void setComments(String comments) {
this.comments = comments;
}
}
}