java读取csv合适文件_解析-您可以推荐一个Java库来读取(并可能写入)CSV文件吗?...
Super CSV是讀取/解析,驗證和映射CSV文件到POJO的絕佳選擇!
我們(Super CSV團隊)剛剛發布了一個新版本(您可以從SourceForge或Maven下載它)。
讀取CSV文件
以下示例使用read()(我們剛剛發布的新閱讀器,使用Dozer進行具有深度映射和基于索引的映射支持的Bean映射)-該示例基于我們網站上的示例。 如果不需要推土機功能(或者只需要簡單的獨立依賴項),則可以改用null(請參見此代碼示例)。
CSV文件示例
這是一個示例CSV文件,代表對調查的答復。 它有一個標題和3行數據,所有行都有8列。
age,consentGiven,questionNo1,answer1,questionNo2,answer2,questionNo3,answer3
18,Y,1,Twelve,2,Albert Einstein,3,Big Bang Theory
,Y,1,Thirteen,2,Nikola Tesla,3,Stargate
42,N,1,,2,Carl Sagan,3,Star Wars
定義從CSV到POJO的映射
CSV的每一行都將被讀入SurveyResponse類,每個類都有一個“答案列表”。 為了使映射起作用,您的類應該是有效的Javabeans(即具有默認的no-arg構造函數,并為每個字段定義了getter / setter)。
在Super CSV中,您可以使用簡單的String數組定義映射-數組的每個元素都對應于CSV文件中的一列。
使用read()您可以使用:
簡單字段映射(例如read())
深度映射(例如read())
索引映射(例如read()-數組或集合的從零開始的索引)
深度+索引映射(例如read())
以下是此示例的字段映射-它使用了這些的組合:
private static final String[] FIELD_MAPPING = new String[] {
"age", // simple field mapping (like for CsvBeanReader)
"consentGiven", // as above
"answers[0].questionNo", // indexed (first element) + deep mapping
"answers[0].answer",
"answers[1].questionNo", // indexed (second element) + deep mapping
"answers[1].answer",
"answers[2].questionNo",
"answers[2].answer" };
轉換和驗證
超級CSV具有有用的單元處理器庫,可用于將字符串從CSV文件轉換為其他數據類型(例如,日期,整數),或進行約束驗證(例如,強制/可選,正則表達式匹配,范圍檢查) 。
使用單元處理器是完全可選的-沒有它們,CSV的每一列都將是一個字符串,因此每個字段也必須是一個字符串。
以下是該示例的單元處理器配置。 與字段映射一樣,數組中的每個元素都代表一個CSV列。 它演示了單元處理器如何將CSV數據轉換為您字段的數據類型,以及如何將它們鏈接在一起。
final CellProcessor[] processors = new CellProcessor[] {
new Optional(new ParseInt()), // age
new ParseBool(), // consent
new ParseInt(), // questionNo 1
new Optional(), // answer 1
new ParseInt(), // questionNo 2
new Optional(), // answer 2
new ParseInt(), // questionNo 3
new Optional() // answer 3
};
閱讀
使用Super CSV進行讀取非常靈活:您可以提供自己的read()(以便您可以從文件,類路徑,zip文件等中讀取內容),并且可以通過首選項配置定界符和引號字符(其中有很多 滿足大多數用途的預定義配置)。
下面的代碼是不言自明的。
創建閱讀器(帶有read()和首選項)
(可選)閱讀標題
配置bean映射
繼續撥打read(),直到得到null(文件末尾)
關閉閱讀器
碼:
ICsvDozerBeanReader beanReader = null;
try {
beanReader = new CsvDozerBeanReader(new FileReader(CSV_FILENAME),
CsvPreference.STANDARD_PREFERENCE);
beanReader.getHeader(true); // ignore the header
beanReader.configureBeanMapping(SurveyResponse.class, FIELD_MAPPING);
SurveyResponse surveyResponse;
while( (surveyResponse =
beanReader.read(SurveyResponse.class, processors)) != null ) {
System.out.println(
String.format("lineNo=%s, rowNo=%s, surveyResponse=%s",
beanReader.getLineNumber(), beanReader.getRowNumber(),
surveyResponse));
}
} finally {
if( beanReader != null ) {
beanReader.close();
}
}
輸出:
lineNo=2, rowNo=2, surveyResponse=SurveyResponse [age=18, consentGiven=true, answers=[Answer [questionNo=1, answer=Twelve], Answer [questionNo=2, answer=Albert Einstein], Answer [questionNo=3, answer=Big Bang Theory]]]
lineNo=3, rowNo=3, surveyResponse=SurveyResponse [age=null, consentGiven=true, answers=[Answer [questionNo=1, answer=Thirteen], Answer [questionNo=2, answer=Nikola Tesla], Answer [questionNo=3, answer=Stargate]]]
lineNo=4, rowNo=4, surveyResponse=SurveyResponse [age=42, consentGiven=false, answers=[Answer [questionNo=1, answer=null], Answer [questionNo=2, answer=Carl Sagan], Answer [questionNo=3, answer=Star Wars]]]
更多信息
您可以在網站上找到更多信息!
總結
以上是生活随笔為你收集整理的java读取csv合适文件_解析-您可以推荐一个Java库来读取(并可能写入)CSV文件吗?...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机网络技术三级做题技巧,三级网络技术
- 下一篇: 【Jmeter篇】1小时轻松搞定项目接口