java 读取csv到list,再将list集合数据写入新的csv文件中

简介: java 读取csv到list,再将list集合数据写入新的csv文件中

一、java读写csv文件

1、说在前面

本文主要是借助 opencsv-5.4.jar工具包,来实现java对csv文件的读取,并将读取的结果,存放到一个list集合中,然后再写入到一个新的csv文件中。

2、准备工作

(1)opencsv-5.4.jar工具jar包,可以下载
(2)实体类 Domain,该类的核心之处就是要加toString()方法,因为后面解析的时候需要用到
package zgw.pojo;
public class Domain {
    public String scqy;
    public String cpdl;
    public String cpxl;
    public String cpph;
    public String xqjhsl;
    public String qdck;
    public String dccf;
    public String ckmax;
    public String jhsj;
    public String drpcbh;
    public String ckl;
    public String rkl;
    public String qckc;
    public String ztkc;
    public String kskcl;
    public String yswf;
    public String rksj;
    public String cksj;
    public String ztcpyqddq;
    public String kccz;
    public String getKccz() {
        return kccz;
    }
    public void setKccz(String kccz) {
        this.kccz = kccz;
    }
    public String getScqy() {
        return scqy;
    }
    public void setScqy(String scqy) {
        this.scqy = scqy;
    }
    public String getCpdl() {
        return cpdl;
    }
    public void setCpdl(String cpdl) {
        this.cpdl = cpdl;
    }
    public String getCpxl() {
        return cpxl;
    }
    public void setCpxl(String cpxl) {
        this.cpxl = cpxl;
    }
    public String getCpph() {
        return cpph;
    }
    public void setCpph(String cpph) {
        this.cpph = cpph;
    }
    public String getXqjhsl() {
        return xqjhsl;
    }
    public void setXqjhsl(String xqjhsl) {
        this.xqjhsl = xqjhsl;
    }
    public String getQdck() {
        return qdck;
    }
    public void setQdck(String qdck) {
        this.qdck = qdck;
    }
    public String getDccf() {
        return dccf;
    }
    public void setDccf(String dccf) {
        this.dccf = dccf;
    }
    public String getCkmax() {
        return ckmax;
    }
    public void setCkmax(String ckmax) {
        this.ckmax = ckmax;
    }
    public String getJhsj() {
        return jhsj;
    }
    public void setJhsj(String jhsj) {
        this.jhsj = jhsj;
    }
    public String getDrpcbh() {
        return drpcbh;
    }
    public void setDrpcbh(String drpcbh) {
        this.drpcbh = drpcbh;
    }
    public String getCkl() {
        return ckl;
    }
    public void setCkl(String ckl) {
        this.ckl = ckl;
    }
    public String getRkl() {
        return rkl;
    }
    public void setRkl(String rkl) {
        this.rkl = rkl;
    }
    public String getQckc() {
        return qckc;
    }
    public void setQckc(String qckc) {
        this.qckc = qckc;
    }
    public String getZtkc() {
        return ztkc;
    }
    public void setZtkc(String ztkc) {
        this.ztkc = ztkc;
    }
    public String getKskcl() {
        return kskcl;
    }
    public void setKskcl(String kskcl) {
        this.kskcl = kskcl;
    }
    public String getYswf() {
        return yswf;
    }
    public void setYswf(String yswf) {
        this.yswf = yswf;
    }
    public String getRksj() {
        return rksj;
    }
    public void setRksj(String rksj) {
        this.rksj = rksj;
    }
    public String getCksj() {
        return cksj;
    }
    public void setCksj(String cksj) {
        this.cksj = cksj;
    }
    public String getZtcpyqddq() {
        return ztcpyqddq;
    }
    public void setZtcpyqddq(String ztcpyqddq) {
        this.ztcpyqddq = ztcpyqddq;
    }
    public Domain() {
    }
    public Domain(String scqy, String cpdl, String cpxl, String cpph, String xqjhsl, String qdck, String dccf, String ckmax, String jhsj, String drpcbh, String ckl, String rkl, String qckc, String ztkc, String kskcl, String yswf, String rksj, String cksj, String ztcpyqddq,String kccz) {
        this.scqy = scqy;
        this.cpdl = cpdl;
        this.cpxl = cpxl;
        this.cpph = cpph;
        this.xqjhsl = xqjhsl;
        this.qdck = qdck;
        this.dccf = dccf;
        this.ckmax = ckmax;
        this.jhsj = jhsj;
        this.drpcbh = drpcbh;
        this.ckl = ckl;
        this.rkl = rkl;
        this.qckc = qckc;
        this.ztkc = ztkc;
        this.kskcl = kskcl;
        this.yswf = yswf;
        this.rksj = rksj;
        this.cksj = cksj;
        this.ztcpyqddq = ztcpyqddq;
        this.kccz = kccz;
    }
    @Override
    public String toString() {
        return "Domain{" +
                "scqy='" + scqy + '\'' +
                ", cpdl='" + cpdl + '\'' +
                ", cpxl='" + cpxl + '\'' +
                ", cpph='" + cpph + '\'' +
                ", xqjhsl='" + xqjhsl + '\'' +
                ", qdck='" + qdck + '\'' +
                ", dccf='" + dccf + '\'' +
                ", ckmax='" + ckmax + '\'' +
                ", jhsj='" + jhsj + '\'' +
                ", drpcbh='" + drpcbh + '\'' +
                ", ckl='" + ckl + '\'' +
                ", rkl='" + rkl + '\'' +
                ", qckc='" + qckc + '\'' +
                ", ztkc='" + ztkc + '\'' +
                ", kskcl='" + kskcl + '\'' +
                ", yswf='" + yswf + '\'' +
                ", rksj='" + rksj + '\'' +
                ", cksj='" + cksj + '\'' +
                ", ztcpyqddq='" + ztcpyqddq + '\'' +
                ", kccz='" + kccz + '\'' +
                '}';
    }
}

3、java读取csv文件

package zgw.com;
//统计
import com.opencsv.CSVWriter;
import zgw.pojo.Domain;
import java.io.*;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class CSV {
    public static void main(String[] args) {
        //读取csv的数据
        ArrayList<Domain> domains = readCSV();
        System.out.println(domains);
    }
    private static ArrayList<Domain> readCSV() {
        ArrayList<Domain> list=new ArrayList<>();
        InputStreamReader inputStreamReader;
        try {
            inputStreamReader = new InputStreamReader(new FileInputStream("C:\\Users\\wyq\\Desktop\\test1.csv"));
            Scanner inputStream = new Scanner(inputStreamReader);
            inputStream.nextLine(); // 第一行表头不要
            while (inputStream.hasNext()) {
                String data = inputStream.nextLine().replace(" ",""); // 得到一行数据
                String[] line = data.split(","); // 分割数据
                if (line.length>0){
                    Domain domain=new  Domain();
                    domain.setScqy(line[0]);
                    domain.setCpdl(line[1]);
                    domain.setCpxl(line[2]);
                    domain.setCpph(line[3]);
                    domain.setXqjhsl(line[4]);
                    domain.setQdck(line[5]);
                    domain.setDccf(line[6]);
                    domain.setCkmax(line[7]);
                    domain.setJhsj(line[8]);
                    domain.setDrpcbh(line[9]);
                    domain.setCkl(line[10]);
                    domain.setRkl(line[11]);
                    domain.setQckc(line[12]);
                    domain.setZtkc(line[13]);
                    domain.setKskcl(line[14]);
                    domain.setYswf(line[15]);
                    domain.setRksj(line[16]);
                    domain.setCksj(line[17]);
                    if (line.length > 18) {
                        domain.setZtcpyqddq(line[18]);
                    }
                    list.add(domain);
                }
            }
            inputStream.close();
            System.out.println("数据读取成功");
            return list;
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }
}

4、java将list集合数据写入csv文件

package zgw.com;
//统计
import com.opencsv.CSVWriter;
import zgw.pojo.Domain;
import java.io.*;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class CSV {
    public static void main(String[] args) {
        //读取csv的数据
        ArrayList<Domain> domains = readCSV();
        System.out.println(domains);
        //写入csv数据
        writeCSV(domains);
    }
    private static void writeCSV(ArrayList<Domain> list) {
        //设置路径及文件名称
        String fileName = "C:\\Users\\wyq\\Desktop\\test1.csv";
        CSVWriter writer = null;
        //装业务数据集合
        List<String[]> data = new ArrayList<>();
        String[] header={"生产企业","产品大类","产品小类","产品牌号","需求计划数量","起点仓库","吨仓储费(元/吨)","仓库容量最大值","计划时间","导入批次编号","出库量","入库量","期初库存","在途库存","可售库存量","已售未发","入库时间","出库时间","在途产品预计到达期"};
        data.add(header);
        try {
            for (Domain domain : list) {
                String[] string = domain.toString().replace("'","").replace("}","").split(",");
                String[] string1 =new String[19];
                for (int i = 0; i < string.length; i++) {
                    if (string[i]!=null){
                        if (string[i].split("=")[1].equals("null")){
                            string1[i]="";
                        }else {
                            string1[i]=string[i].split("=")[1];
                        }
                    }else{
                        string1[i]="";
                    }
                }
                data.add(string1);
            }
            // 创建文件所在目录
            FileOutputStream fileOutputStream = new FileOutputStream(fileName);
            fileOutputStream.write(0xef); //加上这句话
            fileOutputStream.write(0xbb); //加上这句话
            fileOutputStream.write(0xbf); //加上这句话
            writer = new CSVWriter(new OutputStreamWriter(fileOutputStream, StandardCharsets.UTF_8.name()), CSVWriter.DEFAULT_SEPARATOR, CSVWriter.NO_QUOTE_CHARACTER, CSVWriter.DEFAULT_ESCAPE_CHARACTER, CSVWriter.DEFAULT_LINE_END);
            writer.writeAll(data);
            System.out.println("数据写入成功");
        } catch (Exception e) {
            System.out.println("将数据写入CSV出错:"+e);
        } finally {
            if (null != writer) {
                try {
                    writer.flush();
                    writer.close();
                } catch (IOException e) {
                    System.out.println("关闭文件输出流出错:"+e);
                }
            }
        }
    }
    private static ArrayList<Domain> readCSV() {
        ArrayList<Domain> list=new ArrayList<>();
        InputStreamReader inputStreamReader;
        try {
            inputStreamReader = new InputStreamReader(new FileInputStream("C:\\Users\\wyq\\Desktop\\test1.csv"));
            Scanner inputStream = new Scanner(inputStreamReader);
            inputStream.nextLine(); // 第一行表头不要
            while (inputStream.hasNext()) {
                String data = inputStream.nextLine().replace(" ",""); // 得到一行数据
                String[] line = data.split(","); // 分割数据
                if (line.length>0){
                    Domain domain=new  Domain();
                    domain.setScqy(line[0]);
                    domain.setCpdl(line[1]);
                    domain.setCpxl(line[2]);
                    domain.setCpph(line[3]);
                    domain.setXqjhsl(line[4]);
                    domain.setQdck(line[5]);
                    domain.setDccf(line[6]);
                    domain.setCkmax(line[7]);
                    domain.setJhsj(line[8]);
                    domain.setDrpcbh(line[9]);
                    domain.setCkl(line[10]);
                    domain.setRkl(line[11]);
                    domain.setQckc(line[12]);
                    domain.setZtkc(line[13]);
                    domain.setKskcl(line[14]);
                    domain.setYswf(line[15]);
                    domain.setRksj(line[16]);
                    domain.setCksj(line[17]);
                    if (line.length > 18) {
                        domain.setZtcpyqddq(line[18]);
                    }
                    list.add(domain);
                }
            }
            inputStream.close();
            System.out.println("数据读取成功");
            return list;
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }
}


相关文章
|
6天前
|
Java
Java 8 引入的 Streams 功能强大,提供了一种简洁高效的处理数据集合的方式
Java 8 引入的 Streams 功能强大,提供了一种简洁高效的处理数据集合的方式。本文介绍了 Streams 的基本概念和使用方法,包括创建 Streams、中间操作和终端操作,并通过多个案例详细解析了过滤、映射、归并、排序、分组和并行处理等操作,帮助读者更好地理解和掌握这一重要特性。
14 2
|
6天前
|
安全 Java
Java多线程集合类
本文介绍了Java中线程安全的问题及解决方案。通过示例代码展示了使用`CopyOnWriteArrayList`、`CopyOnWriteArraySet`和`ConcurrentHashMap`来解决多线程环境下集合操作的线程安全问题。这些类通过不同的机制确保了线程安全,提高了并发性能。
|
11天前
|
存储 Java
判断一个元素是否在 Java 中的 Set 集合中
【10月更文挑战第30天】使用`contains()`方法可以方便快捷地判断一个元素是否在Java中的`Set`集合中,但对于自定义对象,需要注意重写`equals()`方法以确保正确的判断结果,同时根据具体的性能需求选择合适的`Set`实现类。
|
11天前
|
存储 Java 开发者
在 Java 中,如何遍历一个 Set 集合?
【10月更文挑战第30天】开发者可以根据具体的需求和代码风格选择合适的遍历方式。增强for循环简洁直观,适用于大多数简单的遍历场景;迭代器则更加灵活,可在遍历过程中进行更多复杂的操作;而Lambda表达式和`forEach`方法则提供了一种更简洁的函数式编程风格的遍历方式。
|
10天前
|
存储 Java 开发者
Java中的集合框架深入解析
【10月更文挑战第32天】本文旨在为读者揭开Java集合框架的神秘面纱,通过深入浅出的方式介绍其内部结构与运作机制。我们将从集合框架的设计哲学出发,探讨其如何影响我们的编程实践,并配以代码示例,展示如何在真实场景中应用这些知识。无论你是Java新手还是资深开发者,这篇文章都将为你提供新的视角和实用技巧。
11 0
|
6月前
|
存储 安全 Java
java集合框架及其特点(List、Set、Queue、Map)
java集合框架及其特点(List、Set、Queue、Map)
|
3月前
|
存储 安全 Java
【Java集合类面试二十五】、有哪些线程安全的List?
线程安全的List包括Vector、Collections.SynchronizedList和CopyOnWriteArrayList,其中CopyOnWriteArrayList通过复制底层数组实现写操作,提供了最优的线程安全性能。
|
3月前
|
Java
【Java集合类面试二十三】、List和Set有什么区别?
List和Set的主要区别在于List是一个有序且允许元素重复的集合,而Set是一个无序且元素不重复的集合。
|
23天前
|
安全 Java 程序员
深入Java集合框架:解密List的Fail-Fast与Fail-Safe机制
本文介绍了 Java 中 List 的遍历和删除操作,重点讨论了快速失败(fail-fast)和安全失败(fail-safe)机制。通过普通 for 循环、迭代器和 foreach 循环的对比,详细解释了各种方法的优缺点及适用场景,特别是在多线程环境下的表现。最后推荐了适合高并发场景的 fail-safe 容器,如 CopyOnWriteArrayList 和 ConcurrentHashMap。
52 5
|
3月前
|
存储 安全 Java
java集合框架复习----(2)List
这篇文章是关于Java集合框架中List集合的详细复习,包括List的特点、常用方法、迭代器的使用,以及ArrayList、Vector和LinkedList三种实现类的比较和泛型在Java中的使用示例。
java集合框架复习----(2)List