Java opencsv--使用 Spring 的 PostConstruct机制,项目启动时,将CSV配置文件读取到内存 map 中
一.studentConfig.csv 文件:
ID,NAME,SCORE
1,张三,100
2,李四,90
3,赵五,60
4,王六,55
二.StudentConfigBean.java 文件:
package com.jiangge.config;
public class StudentConfigBean {
/**
* 配置 Bean
*/
private int id;
private String name;
private int score;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
}
三.StudentConfig.java 文件:
package com.jiangge.config;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.stereotype.Component;
import au.com.bytecode.opencsv.CSVReader;
import au.com.bytecode.opencsv.bean.ColumnPositionMappingStrategy;
import au.com.bytecode.opencsv.bean.CsvToBean;
import au.com.bytecode.opencsv.bean.HeaderColumnNameTranslateMappingStrategy;
import javax.annotation.PostConstruct;
@Component
public class StudentConfig {
/**
* 使用 Spring 的 PostConstruct机制,项目启动时,将CSV配置文件读取到内存 map 中
* 库version:opencsv-2.3.jar
*/
public static Map<Integer, StudentConfigBean> studentMap;
@PostConstruct
public void init(){
HeaderColumnNameTranslateMappingStrategy<StudentConfigBean> strategy = new HeaderColumnNameTranslateMappingStrategy<StudentConfigBean>();
strategy.setType(StudentConfigBean.class);
Map<String, String> columnMapping = new HashMap<String, String>();
columnMapping.put("ID", "id"); //csv头和 java类成员变量映射
columnMapping.put("NAME", "name");
columnMapping.put("SCORE", "score");
strategy.setColumnMapping(columnMapping);
List<StudentConfigBean> list = null;
String csvFilename = "C:\\studentConfig.csv"; //TODO 放到项目路径下
CSVReader csvReader = null;
DataInputStream in = null;
try {
in = new DataInputStream(new FileInputStream(new File(csvFilename)));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
try {
csvReader = new CSVReader(new InputStreamReader(in,"utf-8")); //解决中文乱码,另注意csv文件的编码格式.
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
CsvToBean<StudentConfigBean> csvToBean = new CsvToBean<StudentConfigBean>();
list = csvToBean.parse(strategy, csvReader);
studentMap = new HashMap<Integer, StudentConfigBean>();
for (Object object : list) {
StudentConfigBean studentCfgBean = (StudentConfigBean) object;
studentMap.put(studentCfgBean.getId(), studentCfgBean); //放到 map 里
System.out.println("学生的配置文件读取");
System.out.println("Id==>" + studentCfgBean.getId() + " Name==>" + studentCfgBean.getName() + " Score==>" + studentCfgBean.getScore());
}
}
}
四:输出:
学生的配置文件读取
Id==>1 Name==>张三 Score==>100
学生的配置文件读取
Id==>2 Name==>李四 Score==>90
学生的配置文件读取
Id==>3 Name==>赵五 Score==>60
学生的配置文件读取
Id==>4 Name==>王六 Score==>55