|
读取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();
- }
- }
- }
复制代码
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持晓枫资讯。 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |
晓枫资讯-科技资讯社区-免责声明
免责声明:以上内容为本网站转自其它媒体,相关信息仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同其观点或证实其内容的真实性。
1、注册用户在本社区发表、转载的任何作品仅代表其个人观点,不代表本社区认同其观点。
2、管理员及版主有权在不事先通知或不经作者准许的情况下删除其在本社区所发表的文章。
3、本社区的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,举报反馈:  进行删除处理。
4、本社区一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
5、以上声明内容的最终解释权归《晓枫资讯-科技资讯社区》所有。
|