欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

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

来源: javaer 分享于  点击 13455 次 点评:238

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


目录
  • 读取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();
                    }
            }
        }

    总结

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持3672js教程。

    您可能感兴趣的文章:
    • Java实现读取csv文件的两种方式
    • 在Java中读取CSV文件的方式
    • Java实现读取TXT和CSV文件内容
    • Java使用Apache Commons高效处理CSV文件的操作指南
    • 一文详解Java如何使用commons-csv搞定CSV文件操作
    相关栏目:

    用户点评