Java實(shí)現(xiàn)讀取CSV文件數(shù)據(jù)內(nèi)容(含逗號(hào)處理)
最近在公司寫項(xiàng)目時(shí),有個(gè)讀取/修改csv格式文件數(shù)據(jù)的需求。
Java讀取csv文件時(shí)默認(rèn)是按照 ,[英文逗號(hào)]分割的,如果數(shù)據(jù)內(nèi)容不包含逗號(hào)直接整行讀取即可,但內(nèi)容包含了,[英文逗號(hào)] 讀取的并不是我想要的內(nèi)容
經(jīng)過(guò)研究找到hutool工具下CsvUtil 可以用,操作如下
依賴
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.22</version>
</dependency>代碼 demo
CsvReader reader = CsvUtil.getReader();
//讀取方式1
CsvData data = reader.read(FileUtil.file("test.csv"));
//讀取方式2
CsvData data = reader.read(new InputStreamReader(inputStream, CharsetUtil.UTF_8));
//讀取方式3 轉(zhuǎn)為對(duì)象數(shù)據(jù)
List<Bean> data = reader.read(ResourceUtil.getUtf8Reader("bean.csv"), Bean.class)
csv整行數(shù)據(jù)包括表頭
List<CsvRow> rows = data.getRows();
for (CsvRow csvRow : rows) {
//修改index=修改數(shù)據(jù)下標(biāo) value改的內(nèi)容
csvRow.set(index,value);
//讀取 整行數(shù)據(jù)
List<String> columnList = csvRow.getRawList();
}
//單列數(shù)據(jù)
for (CsvRow csvRow : rows) {
csvRow.get(rowNum)
}個(gè)人封裝方法
基于csv列返回對(duì)應(yīng)對(duì)象數(shù)據(jù)
public static <T> List<T> getFromZipTable(Sring file, String fileName, Class<T> clazz)
throws Exception {
List<T> result = reader.read(ResourceUtil.getUtf8Reader(file), clazz);
inputStream.close();
return CollectionUtils.isNotEmpty(result) ? result : new ArrayList<>(0);
}獲取指定文件列內(nèi)容
/**
* 獲取指定文件列內(nèi)容
*/
public static List<String> getColumnValueFromZip(InputStream inputStream, String fileName, String columnName)
throws Exception {
List<String> columnValue = new ArrayList<>();
try {
//從文件中讀取CSV數(shù)據(jù)
CsvReader reader = CsvUtil.getReader();
CsvData data = reader.read(new InputStreamReader(inputStream, CharsetUtil.UTF_8));
List<CsvRow> rows = data.getRows();
//獲條件索引
int rowNum = -1;
CsvRow headers = rows.get(0);
for (int i = 0; i < headers.size(); i++) {
if (headers.get(i).toString().equals(columnName)) {
rowNum = i;
break;
}
}
if (rowNum == -1) {
return columnValue;
}
//遍歷行
boolean headerFlag = true;
for (CsvRow csvRow : rows) {
//跳過(guò)表頭
if (headerFlag) {
headerFlag = false;
continue;
}
columnValue.add(csvRow.get(rowNum));
}
} finally {
inputStream.close();
}
return columnValue;
}到此這篇關(guān)于Java實(shí)現(xiàn)讀取CSV文件數(shù)據(jù)內(nèi)容(含逗號(hào)處理)的文章就介紹到這了,更多相關(guān)Java讀取CSV內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
springboot實(shí)戰(zhàn)權(quán)限管理功能圖文步驟附含源碼
這篇文章主要為大家介紹了springboot實(shí)戰(zhàn)權(quán)限管理功能圖文步驟及示例源碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06
IDEA報(bào)錯(cuò):java:無(wú)效的源發(fā)行版21解決方式
這篇文章主要給大家介紹了關(guān)于IDEA報(bào)錯(cuò):java:無(wú)效的源發(fā)行版21的解決方式,這個(gè)錯(cuò)誤是因?yàn)槟愕捻?xiàng)目使用的Java版本與你的IDEA使用的Java版本不一致導(dǎo)致的,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下2024-06-06
spring data jpa @Query注解中delete語(yǔ)句報(bào)錯(cuò)的解決
這篇文章主要介紹了spring data jpa @Query注解中delete語(yǔ)句報(bào)錯(cuò)的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12
springboot+jwt+springSecurity微信小程序授權(quán)登錄問(wèn)題
這篇文章主要介紹了springboot+jwt+springSecurity微信小程序授權(quán)登錄問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-01-01
SpringBoot2 整合Ehcache組件,輕量級(jí)緩存管理的原理解析
這篇文章主要介紹了SpringBoot2 整合Ehcache組件,輕量級(jí)緩存管理,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-08-08
java通過(guò)注解實(shí)現(xiàn)分表詳解
這篇文章主要為大家詳細(xì)介紹了java如何通過(guò)注解實(shí)現(xiàn)分表,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,有需要的小伙伴可以參考一下2024-11-11
使用java?-jar命令啟動(dòng)Spring?Boot應(yīng)用時(shí)指定特定配置文件的幾種實(shí)現(xiàn)方式
這篇文章主要介紹了在使用java-jar命令啟動(dòng)SpringBoot應(yīng)用時(shí),指定特定配置文件的幾種方式,文中通過(guò)代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2025-01-01
Spring中@EnableScheduling實(shí)現(xiàn)定時(shí)任務(wù)代碼實(shí)例
這篇文章主要介紹了Spring中@EnableScheduling實(shí)現(xiàn)定時(shí)任務(wù)代碼實(shí)例,@EnableScheduling 注解開(kāi)啟定時(shí)任務(wù)功能,可以將多個(gè)方法寫在一個(gè)類,也可以分多個(gè)類寫,當(dāng)然也可以將方法直接寫在上面ScheddulConfig類中,需要的朋友可以參考下2024-01-01

