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 ArrandroidayList();
while(reader.ready()){
String line = reader.readLine();
StringTokenizer st = new StringTokenizer(line,",");
//处理当前行数据
if(st.hasMoreTokens() && flag){
String typeName = cls.getSimpleN编程客栈ame();
//如果文件中存储的是 EnergyProvince类信息
if(typeName.equals("EnergyProvice")){
String provinceName = st.nextToken();
// Float year2019 = Float.valueOf(st.nextToken());
// javascript 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();
}
}
}
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程客栈(www.devze.com)。
加载中,请稍侯......
精彩评论