Java如何读取csv文件并将数据放入对象中

 更新时间:2025年04月22日 09:00:30   作者:早睡早起爱学习i  
这篇文章主要介绍了Java如何读取csv文件并将数据放入对象中的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

读取csv文件并封装数据为对象

例如

图中的一个 .csv 文件,需要读取数据封装对象进行数据持久化。

public static void readCSV(String readpath, ArrayList list)
{
    File inFile = new File(readpath);
    try
    {
        BufferedReader reader = new BufferedReader(new FileReader(inFile));
        boolean sign = false;       //用来跳过第一行的名称
        while(reader.ready())
        {
            String line = reader.readLine();
            StringTokenizer st = new StringTokenizer(line, ",");
            int date, time, num_transaction, response_time;
            double sucRate;

            if (st.hasMoreTokens() && sign)
            {
                date = Integer.valueOf(st.nextToken().trim());
                time = Integer.valueOf(st.nextToken().trim());
                num_transaction = Integer.valueOf(st.nextToken().trim());
                sucRate = Double.valueOf(st.nextToken().trim());
                response_time = Integer.valueOf(st.nextToken().trim());

                Sample sample = new Sample(date, time, num_transaction, sucRate, response_time);
                list.add(sample);
            }
            else
            {
                sign = true;
            }
        }
        reader.close();

    }
    catch (FileNotFoundException e)
    {

        e.printStackTrace();
    }
    catch (IOException e)
    {

        e.printStackTrace();
    }
}

当有多个对象时

可以传入一个 Class对象来获取到需要封装对象的类名,进一步实现方法一般化:

public class ReadCSV {
    public static void readCSV(InputStream inputStream, ArrayList<Object> list, Class cls){
        BufferedReader reader = null;
        try {
            reader = new BufferedReader(new InputStreamReader(inputStream));
            boolean flag = false;
            ArrayList<String> headerList = new ArrayList();
            while(reader.ready()){
                String line = reader.readLine();
                StringTokenizer st = new StringTokenizer(line,",");
                        //处理当前行数据
                if(st.hasMoreTokens() && flag){
                    String typeName = cls.getSimpleName();
                    //如果文件中存储的是 EnergyProvince类信息
                    if(typeName.equals("EnergyProvice")){
                        String provinceName = st.nextToken();
//                        Float year2019 = Float.valueOf(st.nextToken());
//                        Float year2018 = Float.valueOf(st.nextToken());
                        Float year2017 = Float.valueOf(st.nextToken());
                        Float year2016 = Float.valueOf(st.nextToken());
                        Float year2015 = Float.valueOf(st.nextToken());
                        Float year2014 = Float.valueOf(st.nextToken());
                        Float year2013 = Float.valueOf(st.nextToken());
                        Float year2012 = Float.valueOf(st.nextToken());
                        Float year2011 = Float.valueOf(st.nextToken());
                        Map<String,Float> dataMap = new HashMap();
//                        dataMap.put(headerList.get(1),year2019);
//                        dataMap.put(headerList.get(2),year2018);
                        dataMap.put(headerList.get(1),year2017);
                        dataMap.put(headerList.get(2),year2016);
                        dataMap.put(headerList.get(3),year2015);
                        dataMap.put(headerList.get(4),year2014);
                        dataMap.put(headerList.get(5),year2013);
                        dataMap.put(headerList.get(6),year2012);
                        dataMap.put(headerList.get(7),year2011);
                        list.add(new EnergyProvice(provinceName,dataMap));
                    }
                }
                else{   //添加表头到 List 集合
                    while(st.hasMoreTokens()){
                        headerList.add(st.nextToken());
                    }
                    flag=true;
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if(reader!=null)
                try {
                    reader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
        }
    }

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 详解java IO流之缓冲流的使用

    详解java IO流之缓冲流的使用

    本文主要介绍了java的IO流中的缓冲流的使用,缓冲流分为字节和字符缓冲流。分享了有关它们的实例代码,具有一定的参考价值,下面跟着小编一起来看下吧
    2017-01-01
  • Java中将UUID存储为Base64字符串的方法实现

    Java中将UUID存储为Base64字符串的方法实现

    使用Base64编码来对UUID存储在一些特定的场合被广泛的使用,本文主要介绍了Java中将UUID存储为Base64字符串的方法实现,具有一定的参考价值,感兴趣的可以了解一下
    2024-04-04
  • IntelliJ IDEA引入第三方jar包或查看Java源码的时候报decompiled.class file bytecode version:52.0(java 8)错误的解决办法

    IntelliJ IDEA引入第三方jar包或查看Java源码的时候报decompiled.class file byt

    今天小编就为大家分享一篇关于IntelliJ IDEA引入第三方jar包或查看Java源码的时候报decompiled.class file bytecode version:52.0(java 8)错误的解决办法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-10-10
  • Java中的CAS无锁机制实现原理详解

    Java中的CAS无锁机制实现原理详解

    这篇文章主要介绍了Java中的CAS无锁机制实现原理详解,无锁机制,是乐观锁的一种实现,并发情况下保证对共享变量值更改的原子性,CAS是Java中Unsafe类里面的方法,底层通过调用C语言接口,再通过cup硬件指令保证原子性,需要的朋友可以参考下
    2024-01-01
  • springboot @Validated的概念及示例实战

    springboot @Validated的概念及示例实战

    这篇文章主要介绍了springboot @Validated的概念以及实战,使用 @Validated 注解,Spring Boot 应用可以有效地实现输入验证,提高数据的准确性和应用的安全性,本文结合实例给大家讲解的非常详细,需要的朋友可以参考下
    2024-04-04
  • 在IDEA中安装scala、maven、hadoop遇到的问题小结

    在IDEA中安装scala、maven、hadoop遇到的问题小结

    这篇文章主要介绍了在IDEA中安装scala、maven、hadoop遇到的问题小结,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-10-10
  • Springboot如何读取resources下的json配置文件

    Springboot如何读取resources下的json配置文件

    这篇文章主要介绍了Springboot如何读取resources下的json配置文件问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • 一文详解SpringBoot中CommandLineRunner接口

    一文详解SpringBoot中CommandLineRunner接口

    Spring Boot的CommandLineRunner接口是一个函数式接口,用于在Spring Boot应用程序启动后执行一些初始化操作,它提供了一个run方法,该方法在应用程序启动后被调用,本文给大家详细介绍了SpringBoot中CommandLineRunner接口,需要的朋友可以参考下
    2023-10-10
  • 关于maven使用过程中无法导入依赖的一些总结

    关于maven使用过程中无法导入依赖的一些总结

    这篇文章主要介绍了关于maven使用过程中无法导入依赖的一些总结,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • Java中超详细this与super的概念和用法

    Java中超详细this与super的概念和用法

    这篇文章主要介绍了Java中超详细this与super的概念和用法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-02-02

最新评论