49.4. 1. CsvRecord
CsvRecord 注解用于标识模型的根类。它代表记录 = CSV 文件的一行,并可链接到多个子模型类。
注解名称 | 记录类型 | 级别 |
---|---|---|
CsvRecord | csv | 类 |
参数名称 | type | info |
---|---|---|
分隔符 | 字符串 | 必需 - 可以是 '、' 或 ';' 或 'anything"。支持的唯一空白字符是标签(\t)。不支持其它空格(空格)。这个值被解释为正则表达式。如果要使用正则表达式中具有特殊含义的符号,例如 '|' 符号,而不是您必须屏蔽它,如 '|' |
skipFirstLine | 布尔值 | 可选 - 默认值 = false - 允许跳过 CSV 文件的第一行 |
crlf | 字符串 | 可选 - 可能的值 = WINDOWS、UNIX、MAC 或 custom; 默认值。WINDOWS - 允许定义要使用的回车字符。如果您指定之前列出的三个值,则输入(custom)的值将用作 CRLF 字符。 |
generateHeaderColumns | 布尔值 | 可选 - 默认值 = false - 用来生成 CSV 的标头列 |
autospanLine | 布尔值 | Camel 2.13/2.12.2: 可选 - 默认值为 value = false - 如果启用最后一个列,则最后一个列将自动生成到行尾,例如,如果其注释,则此行可以包含所有字符,以及分隔符 char。 |
isOrdered | 布尔值 | 可选 - 默认值 = false - 允许在生成 CSV 时更改字段的顺序 |
quote | 字符串 | Camel 2.8.3/2.9: 选项 - 允许指定生成 CSV 时字段的引号字符。此注解与模型的 root 类关联,必须声明一个时间。 |
引用 | 布尔值 | *Camel 2.11:*optional - 默认值 = false - 在生成 CSV 时必须用引号(和标头)来加引号。 |
endWithLineBreak | 布尔值 | Camel 2.21: 可选 - 默认值 = true - 如果 CSV 生成的文件是否应该以换行符结尾。 |
case 1 : separator = ','
用于分隔 CSV 记录中字段的分隔符为",即:
10, J, Pauline, M, XD12345678, Fortis Dynamic 15/15, 2500, USD,08-01-2009
@CsvRecord( separator = "," ) public Class Order { }
case 2 : separator = ';'
与前面的情况进行比较,此处的分隔符为 ';' 而不是 ',':
10; jine; M; XD12345678; Fortis Dynamic 15/15; 2500; USD; 08-01-2009
@CsvRecord( separator = ";" ) public Class Order { }
case 3 : separator = '|'
与前面的情况进行比较,这里的分隔符为 '|' 而不是 ';':
10| J| Pauline| M| XD12345678| Fortis Dynamic 15/15| 2500| USD| 08-01-2009
@CsvRecord( separator = "\\|" ) public Class Order { }
case 4 : separator = '\",\"'
适用于 Camel 2.8.2 或更早版本
当解析 CSV 记录的字段包含 '、' 或 ';',它也用作分隔符,我们需要找到另一个策略
告知 camel bindy 如何处理此问题单。要使用逗号定义包含数据的字段,您可以使用 simple 或双引号
作为分隔符(例如:'10'、'Street 10、NY'、'USA' 或 "10", "Street 10, NY", "USA")。
Remark :在这种情况下,该行的第一个和最后一个字符(即简单或双引号)将通过 bindy 删除
"10","J","Pauline"," M","XD12345678","Fortis Dynamic 15,15" 2500","USD","08-01-2009"
@CsvRecord( separator = "\",\"" ) public Class Order { }
从 Camel 2.8.3/2.9 或 never bindy 将自动检测记录是否用单引号或双引号括起来,并在从 CSV 变为对象时自动删除这些引号。因此 ,不要在 分隔符中包含引号,但简单操作如下:
"10","J","Pauline"," M","XD12345678","Fortis Dynamic 15,15" 2500","USD","08-01-2009"
@CsvRecord( separator = "," ) public Class Order { }
请注意,如果要将对象与 CSV 总结和使用引号,则需要使用 @CsvRecord 上的 quote
属性来指定要使用的引号字符:
@CsvRecord( separator = ",", quote = "\"" ) public Class Order { }
问题单 5: : 分隔符和跳过优先行
当客户端希望在文件的第一行中时,特性很有趣,数据字段的名称是:
订单 ID、客户端 ID、名字、姓氏、是代码、工具名称、数量、货币、日期
要告知 bindy,在解析过程中必须跳过此第一行,然后我们使用属性 :
@CsvRecord(separator = ",", skipFirstLine = true) public Class Order { }
case 6 : generateHeaderColumns
要在生成 CSV 的第一行中添加,属性 generateHeaderColumns 必须设为 true,如此注解所示:
@CsvRecord( generateHeaderColumns = true ) public Class Order { }
因此,在 unmarshaing 过程中,Bindy 将生成 CSV,如 :
订单 ID、客户端 ID、名字、姓氏、是代码、工具名称、数量、货币、日期
10, J, Pauline, M, XD12345678, Fortis Dynamic 15/15, 2500, USD,08-01-2009
案例 7:回车时返回
如果 camel-bindy 的平台将不会运行 Windows,但 Macintosh 或 Unix 将不会更改 crlf 属性,如下所示。提供三个值:WINDOWS、UNIX 或 MAC
@CsvRecord(separator = ",", crlf="MAC") public Class Order { }
另外,如果由于某种原因需要添加不同的行结尾字符,您可以选择使用 crlf 参数指定它。在以下示例中,我们可以使行以逗号加换行符结尾:
@CsvRecord(separator = ",", crlf=",\n") public Class Order { }
case 8 : isOrdered
有时,从模型创建 CSV 记录时要遵循的顺序与解析过程中使用的顺序不同。然后,在这种情况下,我们可以使用 isOrdered = true 来指明此属性与 DataField 注解的属性 'position' 结合使用。
@CsvRecord(isOrdered = true) public Class Order { @DataField(pos = 1, position = 11) private int orderNr; @DataField(pos = 2, position = 10) private String clientNr; }
Remark:pos 用于解析文件,流,而位置用于生成 CSV