日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java读取csv合适文件_解析-您可以推荐一个Java库来读取(并可能写入)CSV文件吗?...

發布時間:2025/3/15 java 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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文件吗?...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。