excel中的数据导出为properties和map的方法

在做项目的过程中,经常需要处理excel数据,特别是和业务人员配合时,业务人员喜欢使用excel处理一些数据,然后交给我们技术人员进行程序处理。利用POI读取写入excel数据,是经常使用的一个情景。本文介绍的是另外一种情景,是把excel表中的数据作为配置文件,也就是数据是键值对的情景。这种数据可以在java程序中保存为properties文件或者保存到Map中,然后在程序中使用这些数据。

1 数据在excel中的处理

键值对类型的数据在excel中,键和值各占一列,比如键在A列,对应的值在B列。我们可以把C列第一行的数据设置为‘=CONCATENATE(B1,"=",C1)’,比如键为username,值为zhangsan,则C列第一行显示的数据就是username=zhangsanC列其他数据可以直接拷贝第一行数据得到。都是左边是键,右边是值,中间是等号的数据。C列的数据就是我们得到键值对数据。

2 properties文件的读取

java程序中,新建一个properties文件(以properties为后缀的文件),然后直接将excel中的C列数据copyproperties文件中即可。这样就得到了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));  

利用BufferedReaderInputStream进行一次读取,BufferedReader是读取字符串的类,能够避免乱码问题。

在处理过程中还碰到一个文件,就是excel数据copyproperties文件中后,有文件的直接把中文转变为ASCII码,有的就没有转换,具体原因也不是太了解。对于转换为ASCII码的,可以不用BufferedReader处理,也不会出现乱码,但是没有转换的,必须加上BufferedReader处理,否则会出现乱码。

 

posted @ 2018-02-06 15:11  cooldream2009  阅读(1105)  评论(0编辑  收藏  举报