栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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() {
        //读CSV

        try {
            //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() {
        //写CSV

        try {
            //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();
        }
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/782182.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号