JAVA读取CSV文件
网上搜java读取CSV,看到很多帖子写的是这样读取的。
这种方式读取一般的CSV文件是可以的,但是遇到一些比较特别的(如内容带逗号、内容有换行的)就不行了
public static List<String> importCsv(File file){
List<String> dataList=new ArrayList<String>();
BufferedReader br=null;
try {
br = new BufferedReader(new FileReader(file));
String line = "";
while ((line = br.readLine()) != null) {
dataList.add(line);
}
}catch (Exception e) {
}finally{
if(br!=null){
try {
br.close();
br=null;
} catch (IOException e) {
e.printStackTrace();
}
}
}
return dataList;
}
下面介绍一种比较好的读取CSV方式
准备工作
- 导入hutool包
<!-- hutool工具类-->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.3.8</version>
</dependency>
- 准备CSV文件(内容带逗号、内容有换行的)
标题1,标题2,标题3,标题4
内容1,嘻嘻嘻嘻嘻嘻擦擦擦擦擦擦,tyyyyyy,tttt
得得,得的,"芙蓉峰润肤,
乳芙蓉峰,润肤乳",,feffrfrfr
读取为CsvRow
public static void main(String[] args) {
CsvReader reader = CsvUtil.getReader();
//从文件中读取CSV数据
CsvData data = reader.read(FileUtil.file("/xxx/工作簿1.csv"));
List<CsvRow> rows = data.getRows();
int i = 0;
//遍历行
for (CsvRow csvRow : rows) {
i++;
System.out.print("第"+i+"行 ");
//getRawList返回一个List列表,列表的每一项为CSV中的一个单元格(既逗号分隔部分)
//Console.log(csvRow.getRawList());
System.out.print(csvRow.get(0)+" ");
System.out.print(csvRow.get(1)+" ");
System.out.print(csvRow.get(2)+" ");
System.out.println(csvRow.get(3));
}
}
读取为bean
package org.jeecg.modules.system.service;
import cn.hutool.core.annotation.Alias;
import lombok.Data;
@Data
public class TestBean {
@Alias("标题1")
private String title1;
@Alias("标题2")
private String title2;
@Alias("标题3")
private String title3;
@Alias("标题4")
private String title4;
}
使用
final CsvReader reader = CsvUtil.getReader();
//假设csv文件在classpath目录下
final List<TestBean> result = reader.read(
ResourceUtil.getUtf8Reader("/xxx/工作簿1.csv"), TestBean.class);
System.out.println(result);