Java 如何使用opencsv验证csv头文件

Java 如何使用opencsv验证csv头文件,java,opencsv,Java,Opencsv,我正在使用opencsv解析使用web上传的csv文件数据,并将读取的数据填充到bean中(使用HeaderColumnNameTranslateMappingStrategy),这工作正常 但是,在开始处理数据之前,正在努力找到验证(作为第一次检查)文件是否具有所有标题的最佳方法 当文件没有作为列映射映射传递的所有标头时,Opencsv仍然处理该文件并在bean中填充空值。因此,给定CSV文件,您希望在处理之前确保标头包含一组必需的元素 我将使用readHeader方法创建一个实用程序类,该方

我正在使用opencsv解析使用web上传的csv文件数据,并将读取的数据填充到bean中(使用HeaderColumnNameTranslateMappingStrategy),这工作正常

但是,在开始处理数据之前,正在努力找到验证(作为第一次检查)文件是否具有所有标题的最佳方法


当文件没有作为列映射映射传递的所有标头时,Opencsv仍然处理该文件并在bean中填充空值。

因此,给定CSV文件,您希望在处理之前确保标头包含一组必需的元素

我将使用readHeader方法创建一个实用程序类,该方法采用文件名,并使用CSVReader将readNext()作为字符串数组读取头(而不是跳过它)并返回它

然后,您可以添加第二个方法,该方法接受该数组和一个数组或必填字段列表,然后使用类似的方法确保所需数组中的每个元素都在头数组中,如果是,则返回true,否则返回false

然后,如果需要,可以创建第三种方法,将两者结合起来以隐藏复杂性


希望有帮助

当然,我可以这样做,但在服务器端,我没有文件,只有inputstream,一旦我打开inputstream以验证标头,我将无法使用现有的CsvToBean#parse实现来解析数据。Ahhh-streams。好的,有一种方法,但是您必须等到解析之后(因为在解析期间读取头)。因此,您使用HeaderColumnNameTranslateMappingStrategy这一事实意味着您有一个列映射,或者您可以为所需的列快速创建该映射的子集。解析完成后,您可以循环遍历这些名称,然后在HeaderColumnNameTranslateMappingStrategy上调用getColumnIndex方法,并传递列的真实名称。只要不返回空整数,那么该列就存在。