1
1
/*
2
- * Copyright 2013, 2014 Deutsche Nationalbibliothek
2
+ * Copyright 2013-2024 Deutsche Nationalbibliothek and hbz
3
3
*
4
4
* Licensed under the Apache License, Version 2.0 the "License";
5
5
* you may not use this file except in compliance with the License.
24
24
import org .metafacture .framework .helpers .DefaultObjectPipe ;
25
25
26
26
import com .opencsv .CSVReader ;
27
+ import com .opencsv .CSVReaderBuilder ;
28
+ import com .opencsv .RFC4180Parser ;
29
+ import com .opencsv .RFC4180ParserBuilder ;
30
+ import com .opencsv .exceptions .CsvException ;
27
31
28
32
import java .io .IOException ;
29
33
import java .io .StringReader ;
@@ -48,6 +52,7 @@ public final class CsvDecoder extends DefaultObjectPipe<String, StreamReceiver>
48
52
private String [] header = new String [0 ];
49
53
private int count ;
50
54
private boolean hasHeader ;
55
+ private RFC4180Parser parser ;
51
56
52
57
/**
53
58
* Creates an instance of {@link CsvDecoder} with a given separator.
@@ -56,6 +61,7 @@ public final class CsvDecoder extends DefaultObjectPipe<String, StreamReceiver>
56
61
*/
57
62
public CsvDecoder (final String separator ) {
58
63
this .separator = separator .charAt (0 );
64
+ initializeCsvParser ();
59
65
}
60
66
61
67
/**
@@ -65,13 +71,21 @@ public CsvDecoder(final String separator) {
65
71
*/
66
72
public CsvDecoder (final char separator ) {
67
73
this .separator = separator ;
74
+ initializeCsvParser ();
68
75
}
69
76
70
77
/**
71
78
* Creates an instance of {@link CsvDecoder}. The default separator is
72
79
* {@value #DEFAULT_SEP}.
73
80
*/
74
81
public CsvDecoder () {
82
+ initializeCsvParser ();
83
+ }
84
+
85
+ private void initializeCsvParser () {
86
+ this .parser = new RFC4180ParserBuilder ()
87
+ .withSeparator (separator )
88
+ .build ();
75
89
}
76
90
77
91
@ Override
@@ -105,18 +119,19 @@ else if (parts.length == header.length) {
105
119
}
106
120
}
107
121
108
- private String [] parseCsv (final String string ) {
122
+ private String [] parseCsv (final String csv ) {
109
123
String [] parts = new String [0 ];
110
124
try {
111
- final CSVReader reader = new CSVReader (new StringReader (string ),
112
- separator );
125
+ final CSVReader reader = new CSVReaderBuilder (new StringReader (csv ))
126
+ .withCSVParser (parser )
127
+ .build ();
113
128
final List <String []> lines = reader .readAll ();
114
129
if (lines .size () > 0 ) {
115
130
parts = lines .get (0 );
116
131
}
117
132
reader .close ();
118
133
}
119
- catch (final IOException e ) {
134
+ catch (final IOException | CsvException e ) {
120
135
e .printStackTrace ();
121
136
}
122
137
return parts ;
@@ -139,5 +154,6 @@ public void setHasHeader(final boolean hasHeader) {
139
154
*/
140
155
public void setSeparator (final String separator ) {
141
156
this .separator = separator .charAt (0 );
157
+ initializeCsvParser ();
142
158
}
143
159
}
0 commit comments