欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > java >内容正文

java

java 解析csv 乱码_Java采用opencsv解析csv文件以及解析中文乱码问题

发布时间:2024/1/23 java 46 豆豆
生活随笔 收集整理的这篇文章主要介绍了 java 解析csv 乱码_Java采用opencsv解析csv文件以及解析中文乱码问题 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

参考资料: opencsv文档

写下本文时最新版的opencsv版本为4.0, maven坐标如下:

com.opencsv

opencsv

4.0

测试用test.csv

id,date,name

1,2017-10-11,amy

2,2017-10-12,啊

与csv文件对应的java bean

public class TestBean {

// 通过属性名绑定csv列名, 属性名必须与csv列名相同

@CsvBindByName

private Integer id;

// 解析Date格式

@CsvBindByName

@CsvDate("yyyy-MM-dd")

private Date date;

// csv列名与字段名不同时

@CsvBindByName(column = "name")

private String name;

// csv不存在列名时也可通过位置绑定, 如 `@CsvBindByPosition(position = 0) `

// getter, setter and toString() ...

}

使用opencsv解析

public class CsvParser {

public static void main(String[] args) throws IOException {

String path = "test.csv";

List beans = new CsvToBeanBuilder(new FileReader(path))

.withType(TestBean.class).build().parse();

System.out.println(beans);

}

}

结果中中文显示乱码

[TestBean [id=1, date=Wed Oct 11 00:00:00 CST 2017, name=amy],

TestBean [id=2, date=Thu Oct 12 00:00:00 CST 2017, name=��]]

由于FileReader无法指定字符编码, 此时应当使用InputStreamReader设置字符编码

public class CsvParser {

public static void main(String[] args) throws IllegalStateException, IOException {

String path = "test.csv";

String charset = "utf-8";

FileInputStream fileInputStream = new FileInputStream(path);

Reader reader = new InputStreamReader(fileInputStream, charset);

List beans = new CsvToBeanBuilder(reader)

.withType(TestBean.class).build().parse();

System.out.println(beans);

}

}

从结果来看, 中文解析以及正常了

[TestBean [id=1, date=Wed Oct 11 00:00:00 CST 2017, name=amy],

TestBean [id=2, date=Thu Oct 12 00:00:00 CST 2017, name=啊]]

实际上csv列名为中文时, 只要在bean中对应属性配置了@CsvBindByName(column = "中文列名")也是可以解析的

总结

以上是生活随笔为你收集整理的java 解析csv 乱码_Java采用opencsv解析csv文件以及解析中文乱码问题的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。