CSV(2) : 读取与创建CSV文件

本文介绍使用Java进行CSV文件的读取与写入操作的方法,包括依赖库的引入、代码实现及运行示例。通过具体实例展示了如何创建CSV文件、添加数据及读取CSV文件内容。

参考 :  Java实现CSV文件的读写_thebigdipperbdx的博客-优快云博客 

<dependency>
	<groupId>net.sourceforge.javacsv</groupId>
	<artifactId>javacsv</artifactId>
	<version>2.0</version>
</dependency>

import com.csvreader.CsvReader;
import com.csvreader.CsvWriter;

import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

public class CSVUtil {
    public static char separator = ',';

    public static void main(String[] args) {
        // 测试导出
        String filePath = "/Users/leyili/Desktop/test/scoreInfo.csv";
        List<String[]> dataList = new ArrayList<String[]>();
        //添加标题
        dataList.add(new String[]{"学号", "姓名", "分数"});
        for (int i = 0; i < 10; i++) {
            dataList.add(new String[]{"2010000" + i, "张三" + i, "8" + i});
        }
        createCSV(dataList, filePath);

        // 读取CSV文件
        List<String[]> lists = readCSV(filePath, true);
        lists.forEach(list -> {
            for (String s : list) {
                System.err.print(s + " ");
            }
            System.err.println();
        });
    }

    /**
     * 读取CSV文件
     *
     * @param filePath:全路径名
     */
    public static List<String[]> readCSV(String filePath, Boolean isReadHeader){
        CsvReader reader = null;
        List<String[]> dataList = new LinkedList<>();
        try {
            //如果生产文件乱码,windows下用gbk,linux用UTF-8
            reader = new CsvReader(filePath, separator, Charset.forName("UTF-8"));
            // 读取表头
            reader.readHeaders();
            if (isReadHeader != null && isReadHeader) {
                //获取标题
                String[] headArray = reader.getHeaders();
                dataList.add(headArray);
            }
            // 逐条读取记录,直至读完
            while (reader.readRecord()) {
                String[] lines = new String[reader.getColumnCount()];
                for (int i = 0; i < reader.getColumnCount(); i++) {
                    lines[i] = reader.get(i);
                }
                dataList.add(lines);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (null != reader) {
                reader.close();
            }
        }
        return dataList;
    }

    /**
     * 生成CSV文件
     *
     * @param dataList:数据集
     * @param filePath:全路径名
     */
    public static boolean createCSV(List<String[]> dataList, String filePath){
        boolean isSuccess = false;
        CsvWriter writer = null;
        FileOutputStream out = null;
        try {
            out = new FileOutputStream(filePath, true);
            //如果生产文件乱码,windows下用gbk,linux用UTF-8
            writer = new CsvWriter(out, separator, Charset.forName("UTF-8"));
            for (String[] strs : dataList) {
                writer.writeRecord(strs);
            }
            isSuccess = true;
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (null != writer) {
                writer.close();
            }
            if (null != out) {
                try {
                    out.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

        return isSuccess;
    }
}

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值