How to read a string containing a '\' using opencsv?

Christoffer Karlsson picture Christoffer Karlsson · Feb 11, 2013 · Viewed 10.8k times · Source

When I'm reading a csv-file using opencsv it doesn't work properly when encountering a '\' at the end of a string. It makes the " part of the string, instead of the '\' as I want to. I guess there must be some method to add another '\' to have it escape the '\'-character instead? Without having to manually edit the csv-file. I have searched but not found anything.

To clarify my problem, it looks like this:

csv-file

"A",       "B",        "C",       "D"
"value 1", "value 2",  "value 3", "value 4"
"value 5", "value 6\", "value 7", "value 8"

My code looks like this (not really, but it shows my problem):

String inFile = "in.csv";
CSVReader reader = new CSVReader(new FileReader(inFile));
String[] line;

while ((line = reader.readNext()) != null) {
    for (int i = 0; i < line.length(); i++) {
        System.out.println(i + " " + line[i]);
    }
}

I want this to parse into a String[] with 4 elements each, for each row, but the last row parses only into two elements, as shown in the output below.

1 A
2 B
3 C
4 D
1 value 1
2 value 2
3 value 3
4 value 4
1 value 5
2 value 6",value 7,value 8

I have tried to change the reader to:

CSVReader reader = new CSVReader(new InputStreamReader(new FileInputStream(inFile), "UTF-8"));

but without any luck.

Answer

user000001 picture user000001 · Feb 11, 2013

Maybe change the escape character in the constructor of the Reader?

CSVReader(new InputStreamReader(new FileInputStream(inFile)), ',', '"', '|') 

This is assuming | is not used in your CSV file