zoukankan      html  css  js  c++  java
  • 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处理,否则会出现乱码。

  • 相关阅读:
    vue-cil和webpack中本地静态图片的路径问题解决方案
    vue-cil 中的配置分析
    webpack中mainifest.js vendor.js app.js 三者的区别
    css 中可以继承的属性
    有关正则表达式的Js方法(replace)
    css 常用的几种垂直居中(包括图片)
    如何在Vue中建立全局引用或者全局命令
    删除数组中多个不连续的数组元素的正确姿势
    数据库
    代码片段
  • 原文地址:https://www.cnblogs.com/coodream2009/p/8422486.html
Copyright © 2011-2022 走看看