2016-02-24 58 views
1

我正在使用opencsv來解析已經使用web上傳的csv文件數據,並使用正常工作的bean填充讀取數據(使用HeaderColumnNameTranslateMappingStrategy)。如何使用opencsv驗證csv頭

但努力尋找最好的方式來驗證(作爲第一個檢查),如果該文件在開始處理數據之前具有所有標題。

當文件沒有包含作爲columnsMapping映射傳遞的所有頭文件時,Opencsv仍會處理該文件並在bean中填充空值。

回答

1

因此,給定一個CSV文件,您希望在處理之前確保標題包含一組必需的元素。

我會創建一個工具類,它帶有一個readHeader方法,該方法接受文件名並使用CSVReader使用readNext()作爲字符串數組(而不是跳過它)並讀取頭並返回它。

然後,您可以添加第二個方法,該方法接受該數組以及所需字段的列表,然後使用類似Apache Commons ArrayUtils的東西確保所需數組中的每個元素都在標題數組中,並返回true,如果是這樣,否則爲假。

然後,如果你想要的話,你可以創建第三種方法,結合兩者來隱藏複雜性。

希望有所幫助。

+0

當然,我可以做到這一點,但在服務器端我沒有文件,但輸入流,一旦我打開inputstream驗證頭,我將無法使用現有的CsvToBean#解析實現來解析數據。 – Vinod

+1

啊 - 溪流。好的,有一種方法,但你必須等到解析完畢後(因爲它是在解析期間讀取頭文件)。因此,事實上,你正在使用的HeaderColumnNameTranslateMappingStrategy意味着你有地圖的列 - 這也可以快速創建地圖的一個子集爲需要的列。一旦解析完成後,你就可以通過名稱循環,然後呼籲HeaderColumnNameTranslateMappingStrategy的getColumnIndex方法傳入列的真實姓名。只要你不返回一個空整數,那麼列就在那裏。 –