设为首页收藏本站
网站公告 | 这是第一条公告
     

 找回密码
 立即注册
缓存时间13 现在时间13 缓存数据 风骨神仙籍里人,诗狂酒圣且平生。开元一遇成何事,留得千秋万古名。

风骨神仙籍里人,诗狂酒圣且平生。开元一遇成何事,留得千秋万古名。 -- 杨花落尽子规啼

查看: 229|回复: 0

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

[复制链接]

  离线 

TA的专栏

等级头衔

等級:晓枫资讯-列兵

在线时间
0 小时

积分成就
威望
0
贡献
51
主题
41
精华
0
金钱
144
积分
94
注册时间
2023-10-4
最后登录
2025-5-31

发表于 2025-5-31 05:56:09 | 显示全部楼层 |阅读模式

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

1.png

例如

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

  1. public static void readCSV(String readpath, ArrayList list)
  2. {
  3. File inFile = new File(readpath);
  4. try
  5. {
  6. BufferedReader reader = new BufferedReader(new FileReader(inFile));
  7. boolean sign = false; //用来跳过第一行的名称
  8. while(reader.ready())
  9. {
  10. String line = reader.readLine();
  11. StringTokenizer st = new StringTokenizer(line, ",");
  12. int date, time, num_transaction, response_time;
  13. double sucRate;
  14. if (st.hasMoreTokens() && sign)
  15. {
  16. date = Integer.valueOf(st.nextToken().trim());
  17. time = Integer.valueOf(st.nextToken().trim());
  18. num_transaction = Integer.valueOf(st.nextToken().trim());
  19. sucRate = Double.valueOf(st.nextToken().trim());
  20. response_time = Integer.valueOf(st.nextToken().trim());
  21. Sample sample = new Sample(date, time, num_transaction, sucRate, response_time);
  22. list.add(sample);
  23. }
  24. else
  25. {
  26. sign = true;
  27. }
  28. }
  29. reader.close();
  30. }
  31. catch (FileNotFoundException e)
  32. {
  33. e.printStackTrace();
  34. }
  35. catch (IOException e)
  36. {
  37. e.printStackTrace();
  38. }
  39. }
复制代码

当有多个对象时

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

  1. public class ReadCSV {
  2. public static void readCSV(InputStream inputStream, ArrayList<Object> list, Class cls){
  3. BufferedReader reader = null;
  4. try {
  5. reader = new BufferedReader(new InputStreamReader(inputStream));
  6. boolean flag = false;
  7. ArrayList<String> headerList = new ArrayList();
  8. while(reader.ready()){
  9. String line = reader.readLine();
  10. StringTokenizer st = new StringTokenizer(line,",");
  11. //处理当前行数据
  12. if(st.hasMoreTokens() && flag){
  13. String typeName = cls.getSimpleName();
  14. //如果文件中存储的是 EnergyProvince类信息
  15. if(typeName.equals("EnergyProvice")){
  16. String provinceName = st.nextToken();
  17. // Float year2019 = Float.valueOf(st.nextToken());
  18. // Float year2018 = Float.valueOf(st.nextToken());
  19. Float year2017 = Float.valueOf(st.nextToken());
  20. Float year2016 = Float.valueOf(st.nextToken());
  21. Float year2015 = Float.valueOf(st.nextToken());
  22. Float year2014 = Float.valueOf(st.nextToken());
  23. Float year2013 = Float.valueOf(st.nextToken());
  24. Float year2012 = Float.valueOf(st.nextToken());
  25. Float year2011 = Float.valueOf(st.nextToken());
  26. Map<String,Float> dataMap = new HashMap();
  27. // dataMap.put(headerList.get(1),year2019);
  28. // dataMap.put(headerList.get(2),year2018);
  29. dataMap.put(headerList.get(1),year2017);
  30. dataMap.put(headerList.get(2),year2016);
  31. dataMap.put(headerList.get(3),year2015);
  32. dataMap.put(headerList.get(4),year2014);
  33. dataMap.put(headerList.get(5),year2013);
  34. dataMap.put(headerList.get(6),year2012);
  35. dataMap.put(headerList.get(7),year2011);
  36. list.add(new EnergyProvice(provinceName,dataMap));
  37. }
  38. }
  39. else{ //添加表头到 List 集合
  40. while(st.hasMoreTokens()){
  41. headerList.add(st.nextToken());
  42. }
  43. flag=true;
  44. }
  45. }
  46. } catch (Exception e) {
  47. e.printStackTrace();
  48. } finally {
  49. if(reader!=null)
  50. try {
  51. reader.close();
  52. } catch (IOException e) {
  53. e.printStackTrace();
  54. }
  55. }
  56. }
复制代码

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持晓枫资讯。


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
晓枫资讯-科技资讯社区-免责声明
免责声明:以上内容为本网站转自其它媒体,相关信息仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同其观点或证实其内容的真实性。
      1、注册用户在本社区发表、转载的任何作品仅代表其个人观点,不代表本社区认同其观点。
      2、管理员及版主有权在不事先通知或不经作者准许的情况下删除其在本社区所发表的文章。
      3、本社区的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,举报反馈:点击这里给我发消息进行删除处理。
      4、本社区一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
      5、以上声明内容的最终解释权归《晓枫资讯-科技资讯社区》所有。
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~
严禁发布广告,淫秽、色情、赌博、暴力、凶杀、恐怖、间谍及其他违反国家法律法规的内容。!晓枫资讯-社区
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|晓枫资讯--科技资讯社区 本站已运行

CopyRight © 2022-2025 晓枫资讯--科技资讯社区 ( BBS.yzwlo.com ) . All Rights Reserved .

晓枫资讯--科技资讯社区

本站内容由用户自主分享和转载自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

如有侵权、违反国家法律政策行为,请联系我们,我们会第一时间及时清除和处理! 举报反馈邮箱:点击这里给我发消息

Powered by Discuz! X3.5

快速回复 返回顶部 返回列表