excel中的数据导出为properties和map的方法
在做项目的过程中,经常需要处理excel数据,特别是和业务人员配合时,业务人员喜欢使用excel处理一些数据,然后交给我们技术人员进行程序处理。利用POI读取写入excel数据,是经常使用的一个情景。本文介绍的是另外一种情景,是把excel表中的数据作为配置文件,也就是数据是键值对的情景。这种数据可以在java程序中保存为properties文件或者保存到Map中,然后在程序中使用这些数据。
1 数据在excel中的处理
键值对类型的数据在excel中,键和值各占一列,比如键在A列,对应的值在B列。我们可以把C列第一行的数据设置为‘=CONCATENATE(B1,"=",C1)’,比如键为username,值为zhangsan,则C列第一行显示的数据就是username=zhangsan,C列其他数据可以直接拷贝第一行数据得到。都是左边是键,右边是值,中间是等号的数据。C列的数据就是我们得到键值对数据。
2 properties文件的读取
在java程序中,新建一个properties文件(以properties为后缀的文件),然后直接将excel中的C列数据copy到properties文件中即可。这样就得到了properties配置文件。
Properties文件的读取。主要利用Properties类的方法。
Properties dbcfgProp=new Properties();
//Properties2Map是程序所在类的名称
Properties2Map properties2Map=new Properties2Map();
InputStream is=properties2Map.getClass().getResourceAsStream("/dbconfig.properties");
dbcfgProp.load(is);
//得到username对应的值
System.out.println(dbcfgProp.getProperty("username"));
3 properties数据存入map中
将properties文件的key存到map中的key,对应的value存入map中的value。具体程序如下。
Enumeration propertyNames = dbcfgProp.propertyNames();
while(propertyNames.hasMoreElements()){
String key=propertyNames.nextElement().toString();
String value=dbcfgProp.getProperty(key);
dbcfgMap.put(key,value);
}
4 完整的程序
public class Properties2Map {
public static void main(String[] args) {
Properties2Map properties2Map=new Properties2Map();
Properties dbcfgPro = new Properties();
InputStream dbcfg_in = properties2Map.getClass().getResourceAsStream("/dbcfg.properties");
BufferedReader bf = new BufferedReader(new InputStreamReader(dbcfg_in));
Map<String, String> dbcfgMap=new HashMap<>();
try {
dbcfgPro.load(bf);
Enumeration propertyNames = dbcfgPro.propertyNames();
while(propertyNames.hasMoreElements()){
String key=propertyNames.nextElement().toString();
String value=dbcfgPro.getProperty(key);
dbcfgMap.put(key,value);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//打印出来与excel比对
for (String key : dbcfgMap.keySet()) {
System.out.println(key+"="+dbcfgMap.get(key));
}
}
}
5 注意的问题。
在整个处理过程中,主要的碰到的问题是properties文件的中文乱码问题。一般我们的字符编码都使用UTF-8,可以设置properties文件的编码为UTF-8。在eclipse中,依次选择windows--Preferences--General--Content Types,在右侧选择Text--Java Properties File,然后在编码方式中填写UTF-8,点击UPDATE,然后确定。这样就设置了properties的编码方式。
再一个就是
BufferedReader
bf = new BufferedReader(new InputStreamReader(dbcfg_in));
利用BufferedReader对InputStream进行一次读取,BufferedReader是读取字符串的类,能够避免乱码问题。
在处理过程中还碰到一个文件,就是excel数据copy到properties文件中后,有文件的直接把中文转变为ASCII码,有的就没有转换,具体原因也不是太了解。对于转换为ASCII码的,可以不用BufferedReader处理,也不会出现乱码,但是没有转换的,必须加上BufferedReader处理,否则会出现乱码。