Spring Batch DelimitedLineTokenizer Klasse quoteCharacter Eigenschaft Verhalten
Habe ich ein item-reader wie folgt:
<beans:bean id="myItemReader" class="org.springframework.batch.item.file.FlatFileItemReader">
<beans:property name="resource" ref="myFileResource" />
<beans:property name="lineMapper">
<beans:bean class="org.springframework.batch.item.file.mapping.DefaultLineMapper">
<beans:property name="lineTokenizer">
<beans:bean class="org.springframework.batch.item.file.transform.DelimitedLineTokenizer">
<beans:property name="delimiter" value="|"/>
<beans:property name="quoteCharacter" value="~"/>
<beans:property name="names" value="${my_column_names}" />
</beans:bean>
</beans:property>
<beans:property name="fieldSetMapper">
<beans:bean class="${my_mapper_class_name}" />
</beans:property>
</beans:bean>
</beans:property>
Als klar von oben, ich bin verändert, die quote-Zeichen aus Standard " (doppelte Anführungszeichen) zu ~ (tilt-Zeichen)
Nun, Java-Docs auf DelimitedLineTokenizer auf Anführungszeichen sagt:
Öffentlichen Set-Methode für die quoteCharacter. Die Anführungszeichen können verwendet werden, um zu verlängern ein Feld über Zeilenenden oder umschließen eine Zeichenkette, die das Trennzeichen enthält. Innerhalb eines zitierten token-Anführungszeichen können verwendet werden, um die Flucht an sich, also "a""b""c" mit dem Token zu einem"b"c.
Damit, wenn meine Daten selbst werden mit Trennzeichen (das pipe-Zeichen in meinem Fall), darf ich dann umgeben Sie es mit der Anführungszeichen - was ich auch Tat. E. g. Zeile unten, wo die Dritte Spalte enthält die Trennzeichen:
oneColumn|twoColumn|three~|~Column|fourColumn
Jedoch, den Wert, die kommt in meinem java-Objekt für Spalte drei "drei~|~Spalte" und nicht "drei|Spalte", wie es sein sollte.
Sollte nicht die Anführungszeichen verwendet, um zu entkommen Trennzeichen in den Daten werden automatisch verarbeitet und ignoriert, während der Wert in der Eigenschaft der resultierenden java-Objekt Element?
Ist das ersetzen der Anführungszeichen mit einem leeren string wieder in den Schreiber (PreparedStatementSetter oder LineAggregator) die einzige Lösung für dieses ?
Vielen Dank für das Lesen!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ein string ist, soll zitiert werden, wenn es beginnt/endet mit Zitat char.
In deinem Beispiel:
und erhalten Sie
three|Column
Sie haben zu zitieren, string, wenn es enthält ein Trennzeichen, Leerzeichen, Zeilenumbruch oder das zitieren char selbst; zitiert char verdoppelt werden muss, wenn ein Teil des Wertes(siehe hier)