200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > JavaCSV 读写csv文件 解决中文乱码问题

JavaCSV 读写csv文件 解决中文乱码问题

时间:2023-06-20 23:00:55

相关推荐

JavaCSV 读写csv文件 解决中文乱码问题

逗号分隔值(CSV)文件,将数据逐列存储,并用分隔符将其分开(通常是逗号",")。可直接使用记事本打开查看。

有很多种读写CSV文件的方法,这里介绍的是JavaCSV。Java CSV是一个小型的快速开源Java库,用于读取和写入CSV和纯分隔文本

文件。可以处理各种CSV文件,文本限定,Excel格式等。

JavaCSV 下载

使用这个jar包需要添加依赖,方法就不必赘述了,网上大批教程,需要的可以自己搜索。

直接上代码

package com.example.myapplication;import java.io.IOException;import java.nio.charset.Charset;import com.csvreader.CsvReader;import com.csvreader.CsvWriter;public class MainActivity {public void readCSV() {//读CSVtry {//filePath是CSV文件的全路径,根据自己的实际情况填写CsvReader csvReader = new CsvReader("filePath");//读表头csvReader.readHeaders();while (csvReader.readRecord()) {//读取一整行System.out.println(csvReader.getRawRecord());//读取这行的某列,序号从0开始,csvReader.get(0)读取的是这行的第一列System.out.println(csvReader.get(0));//读取这行的某列,column是列名,根据实际情况填写System.out.println(csvReader.get("column"));}} catch (IOException e) {e.printStackTrace();}}public void writeCSV() {//写CSVtry {//filePath是CSV文件的全路径,根据自己的实际情况填写CsvWriter csvWriter = new CsvWriter("filePath");//写入一行String s[] = {"1", "2"};csvWriter.writeRecord(s);} catch (IOException e) {e.printStackTrace();}}}

上述代码可以完成英文CSV文件的读写,但读写中文将出现乱码,在网上找了很久也没找到解决方案。

后来查看JavaCSV源码的时候,看到了这个构造函数

public CsvReader(String var1, char var2, Charset var3) throws FileNotFoundException {if (var1 == null) {throw new IllegalArgumentException("Parameter fileName can not be null.");} else if (var3 == null) {throw new IllegalArgumentException("Parameter charset can not be null.");} else if (!(new File(var1)).exists()) {throw new FileNotFoundException("File " + var1 + " does not exist.");} else {this.fileName = var1;this.userSettings.Delimiter = var2;this.charset = var3;this.isQualified = new boolean[this.values.length];}}public CsvReader(String var1, char var2) throws FileNotFoundException {this(var1, var2, Charset.forName("ISO-8859-1"));}public CsvReader(String var1) throws FileNotFoundException {this(var1, ',');}

这一下就明了了。var1是文件的路径,var2是分隔符,var3是字符编码集。

开始我们使用的是单参构造函数,它会调用双参构造函数,双参构造函数再调用三参构造函数。

这样的话我们的默认编码集就是"ISO-8859-1",但这默认的编码集并不一定是我们文件的实际编码集。

如果不想遇见中文乱码的情况,就要确定文件实际使用的编码集(可以用记事本另存为查看),并用该编码集作为var3参数来创建对象。

下附代码

package com.example.myapplication;import java.io.IOException;import java.nio.charset.Charset;import com.csvreader.CsvReader;import com.csvreader.CsvWriter;public class MainActivity {public void readCSV() {try {//filePath是CSV文件的全路径,utf-8是编码集,根据自己的实际情况填写CsvReader csvReader = new CsvReader("filePath",',', Charset.forName("utf-8"));//读表头csvReader.readHeaders();while (csvReader.readRecord()) {//读取一整行System.out.println(csvReader.getRawRecord());//读取这行的某列,序号从0开始,csvReader.get(0)读取的是这行的第一列System.out.println(csvReader.get(0));//读取这行的某列,column是列名,根据实际情况填写System.out.println(csvReader.get("column"));}} catch (IOException e) {e.printStackTrace();}}public void writeCSV() {try {//filePath是CSV文件的全路径,GBK是编码集,根据自己的实际情况填写。CsvWriter csvWriter = new CsvWriter("filePath",',',Charset.forName("GBK"));//写入一行String s[] = {"1", "2"};csvWriter.writeRecord(s);} catch (IOException e) {e.printStackTrace();}}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。