I'm populating a file from a resultSet like so :
while(rs.next()){
String[] entries = new String[3];
entries[0] = rs.getString(1);
entries[1] = ",";
entries[2] = rs.getString(2);
println("entries : "+entries);
writer.writeNext(entries);
}
When I open the excel file the values contain double quotes around them. So test1,test2,test3 when read from the database and written to a .csv file becomes "test1","test2","test3"
How can I write the text to file but not include the quotes ?
When I print the entries to the console the double quotes are not printed so I don't know where they are being added ?
Since this question pops up at the first place in google results when someone looks for OpenCSV and quotes issue, I'm going to add the newer solution here.
I'm using version 4.6 and it is indeed possible to skip the quotes, while keeping quotes in entires that contain separator char.
Sample code:
List<SomeCsvEntryTO> csvEntries = new ArrayList<>();
csvEntries.add(new SomeCsvEntryTO("sdf1", "sdf2"));
csvEntries.add(new SomeCsvEntryTO("hgh1", "hgh2;hghgh2"));
Writer writer = new FileWriter(filePath);
StatefulBeanToCsv<SomeCsvEntryTO> csvWriter = new StatefulBeanToCsvBuilder<SomeCsvEntryTO>(writer)
.withSeparator(';')
.withApplyQuotesToAll(false)
.build();
csvWriter.write(csvEntries);
writer.close();
SomeCsvEntryTO:
public class SomeCsvEntryTO{
@CsvBindByName(column = "sample1colname")
private String sample1;
@CsvBindByName(column = "sample2colname")
private String sample2;
}
As you can see above, I am using semicolon as a separator and I do not change the quotechar. Just change the withApplyQuotesToAll
to false
.
This produces the following result:
SAMPLE1COLNAME;SAMPLE2COLNAME
sdf1;sdf2
hgh1;"hgh2;hghgh2"
Just to extend on Matten's answer, use the built-in characters in the CSVWriter to specify the quotechar
. So your writer would look like the following:
CSVWriter writer = new CSVWriter(new FileWriter(fileName), CSVWriter.DEFAULT_SEPARATOR, CSVWriter.NO_QUOTE_CHARACTER);
Yes. There is a CSVWriter in the same package that follows the same semantics as the CSVReader. For example, to write a tab separated file:
CSVWriter writer = new CSVWriter(new FileWriter("yourfile.csv"), '\t');
// feed in your array (or convert your data to an array)
String[] entries = "first#second#third".split("#");
writer.writeNext(entries);
writer.close();
If you'd prefer to use your own quote characters, you may use the three arg version of the constructor, which takes a quote character (or feel free to pass in CSVWriter.NO_QUOTE_CHARACTER).
You can also customise the line terminators used in the generated file (which is handy when you're exporting from your Linux web application to Windows clients). There is a constructor argument for this purpose.
see this link on how to use NO_QUOTE_CHARACTER constructor and proper encoding when writing out to a file:
https://stackoverflow.com/a/29362439/1454926
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With